我想在 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/