我正在浏览 Julia 文档,当我在 Julia REPL 中尝试一些东西时,我不小心输入A = Tuple{4,5}
了A = (4,5)
. 令我惊讶的是,这并没有引发错误。
为什么这A
是 aDataType
即使 4 和 5 是Int64
/ 的实例Int32
?
因为Tuple{Int, String}
is 的类型(123, "hello")
类似地Tuple{4, 5}
将是一个双元素元组的类型4
,其第一个值具有 type ,其第二个值具有 type 5
。当然,4
and5
不是任何值的类型,所以这实际上不是任何可以存在的值的类型,但它仍然是一种类型,只是一个“无人居住”的类型,即没有任何实例的类型。一般来说,Julia 的类型系统完全适用于无人居住的类型。
我们可以Tuple{4, 5}
通过坚持参数Tuple
必须是类型来阻止对象被构造,但是这还没有完成,因为让人们构造这个类型对象并没有真正的危害。即使 Julia 确实Tuple{4, 5}
通过坚持将 to 的参数设为Tuple
类型来阻止您进行构造,这仍然是有效的语法,因为通常情况下, to 的参数Tuple
是任意表达式,4
并且5
是完全有效的表达式,恰好评估为不' t 作为 的参数很有意义Tuple
。同样,如果我写了Tuple{A, B}
这将是有效的语法,即使我们有A = 4
和B = 5
。所以虽然我们可以防止Tuple{4, 5}
从构造开始,这将始终是有效的语法。
还应该注意的是,即使参数 toTuple
没有意义,除非它们是类型,但将类型参数作为值而不是类型通常很有用。例如,类型[1 2; 3 4]
是Array{Int, 2}
其中第二个类型参数是整数,表示数组是二维的,而第一个参数给出数组的元素类型。
归档时间: |
|
查看次数: |
73 次 |
最近记录: |