小编Ale*_*207的帖子

朱利亚的类型稳定的do-blocks

我想从带有do-block的文件中读取数据。使用do块非常重要,因为即使在读取文件期间发生错误,我也必须确保正确关闭文件。文件中的数据应转换为作为参数提供的类型。我真正的用例是使用NetCDF文件,但是我可以重现纯文本文件的类型稳定性问题。

假设有一个file.txt包含content 的文件123,可以使用以下文件创建:

 write("file.txt","123")
Run Code Online (Sandbox Code Playgroud)

当我按如下所示加载没有do-block的文件时,结果是类型稳定的:

function loadfile1(T)
    f = open("file.txt")
    data = parse(T,readline(f))
    close(f)
    return data
end
Run Code Online (Sandbox Code Playgroud)

@code_warntype正确推断我得到Float32的结果是:

@code_warntype loadfile1(Float32)
Body::Float32
[...]
Run Code Online (Sandbox Code Playgroud)

但是,以下变体:

function loadfile2(T)
    f = open("file.txt") do f
        return parse(T,readline(f))
    end
end
Run Code Online (Sandbox Code Playgroud)

产生类型不稳定的代码:

 @code_warntype loadfile2(Float32)
Body::Any
9 1 ? %1 = %new(getfield(Main, Symbol("##842#843")){DataType}, T)::getfield(Main, Symbol("##842#843")){DataType}                                                                                  ? 
  ?   %2 = Main.open::Core.Compiler.Const(open, false)                                                                                                                                            ? 
  ?   %3 = invoke Base.:(#open#294)($(QuoteNode(Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}()))::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, %2::Function, %1::getfield(Main, Symbol("##842#843")){DataType}, "file.txt"::String)::Any
  ???      return %3            
Run Code Online (Sandbox Code Playgroud)

如何修改函数loadfile2(带有do-block)并仍然获得类型稳定的结果?

julia type-stability

4
推荐指数
1
解决办法
55
查看次数

Julia中向量的唯一元素索引

如何获取向量的唯一元素的索引?

例如,如果你有一个向量v = [1,2,1,3,5,3],那么唯一元素是[1,2,3,5] (输出unique)并且它们的索引是ind = [1,2,4,5].什么功能,可以让我计算ind,这样v[ind] = unique(v)

julia

2
推荐指数
4
解决办法
1200
查看次数

安装一个包而不更新其他不相关的包 (Julia 1.0)

是否可以在不更新其他软件包的情况下在 Julia 1.0 中安装软件包?例如,如果安装ClusterManagers,则包IJulia(以及其他)会更新。该包ClusterManagers没有依赖项。

(v1.0) pkg> add ClusterManagers
 Resolving package versions...
 Installed IJulia ????????????? v1.12.0
 Installed ClusterManagers ???? v0.3.2
 Installed ColorTypes ????????? v0.7.5
 Installed OrderedCollections ? v1.0.1
  Updating `~/.julia/environments/v1.0/Project.toml`
  [34f1f09b] + ClusterManagers v0.3.2
  [7073ff75] ? IJulia v1.11.1 ? v1.12.0
  Updating `~/.julia/environments/v1.0/Manifest.toml`
  [34f1f09b] + ClusterManagers v0.3.2
  [3da002f7] ? ColorTypes v0.7.4 ? v0.7.5
  [7073ff75] ? IJulia v1.11.1 ? v1.12.0
  [bac558e1] ? OrderedCollections v1.0.0 ? v1.0.1
  Building IJulia ? `~/.julia/packages/IJulia/4VL8h/deps/build.log`
Run Code Online (Sandbox Code Playgroud)

我在 Linux 上使用 Julia 1.0.0(官方https://julialang.org/release)。

julia

2
推荐指数
1
解决办法
257
查看次数

标签 统计

julia ×3

type-stability ×1