朱莉娅类型问题

3

1 为什么当我在函数内部定义变量及其类型时,一切正常,但当它是全局变量时却出错? 示例:

  n::Int8 = 3
  ERROR: LoadError: UndefVarError: n not defined

2 为什么我执行一些简单操作时变量类型会改变?例如:

julia> function main()
           n::Int8 = 5
           c = collect(1:n)
           println(c)
           println(typeof(c))
       end
main (generic function with 1 method)

julia> main()
[1,2,3,4,5]
Array{Int64,1}


julia> n = zero(Int8)
0
julia> typeof(ans)
Int8
julia> n += 5
5
julia> typeof(ans)
Int64

3 如何保持变量的初始类型?


4
n += 5 中,即 n = n + 55 是 Int64 类型。试试 n += Int8(5)。否则,当将 Int64 加到 Int8 上时,得到 Int64 是合理的(在 Julia 书籍中查找“升级”)。 - Dan Getz
2
类似地,尝试使用 collect(Int8(1):Int8(5)) - Dan Getz
2
当变量n被赋值为3后,断言n::Int8是否多余?另外,我认为Int会自动转换为基于Julia运行的硬件所需的类型,这就是为令collect(1:n)结果为Int64数组的原因。详情请参见http://docs.julialang.org/en/release-0.4/manual/integers-and-floating-point-numbers/#integers - amrods
2
在这种情况下,您也可以使用one函数:c = collect(one(n):n)::Vector{Int8} - HarmonicaMuse
1个回答

2

目前(Julia 0.4),该问题的第1和第2部分由Julia手册中的这段话回答:

目前,在全局范围内,例如在REPL中,无法使用类型声明,因为Julia尚未具有常量类型全局变量。

正如评论中所讨论的那样,对于第3部分,有几个选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接