julia - Julia 中如何锁定变量类型?

标签 julia

我想在 Julia 中锁定变量的类型,该怎么做?例如我定义了一个名为weight的数组,

weight = Array{Float64,1}([1,2,3])

现在我想锁定权重的类型为Array{Float64,1},可以吗?

我的意思是如果不锁定权重类型,那么如果我错误地或随意地锁定了

weight = 1

然后weight将变成一个Int64变量,因此它不再是一个一维数组。这显然不是我想要的。

我只是想确保一旦我将权重定义为 1D Float64 数组,那么如果我更改权重的类型,我希望 Julia 给我一个错误,指出权重的类型已更改,这是不允许的。是否可以?谢谢!

这很有用,因为通过这样做,它可以防止我忘记重量是一个一维数组,从而防止错误。

最佳答案

对于全局变量使用const:

julia> const weight = Array{Float64,1}([1,2,3])
3-element Vector{Float64}:
 1.0
 2.0
 3.0

julia> weight[1]=11
11

julia> weight=99
ERROR: invalid redefinition of constant weight

请注意,重新定义引用将引发警告:

julia> const u = 5
5

julia> u=11
WARNING: redefinition of constant u. This may fail, cause incorrect answers, or produce other errors

您可以使用 Ref 类型来规避它:

julia> const z = Ref{Int}(5)
Base.RefValue{Int64}(5)

julia> z[] = 11
11

julia> z[] = "hello"
ERROR: MethodError: Cannot `convert` an object of type String to an object of type Int64

在函数中使用带有类型声明的local:

julia> function f()
           local a::Int
           a="hello"
       end;

julia> f()
ERROR: MethodError: Cannot `convert` an object of type String to an object of type Int64

关于julia - Julia 中如何锁定变量类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68597175/

相关文章:

arrays - Julia 中的静态数组?

julia - 矩阵上的循环移位

julia - 从 Julia 的稀疏矩阵中删除显式零值

package - 我可以制作一个包含多个可以独立导入的模块的 Julia 包吗?

openstreetmap - Julia 版本 0.4.5 Openstreetmap

dataframe - 获取子集化后剩余的数据帧

dataframe - 如何从 julia 数据框中获取对行号的引用?

julia - julia 数据帧中的 Pandas value_counts 有什么更好的等价物吗?

performance - Julia 性能改进建议