我正在浏览 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。当然,4and5不是任何值的类型,所以这实际上不是任何可以存在的值的类型,但它仍然是一种类型,只是一个“无人居住”的类型,即没有任何实例的类型。一般来说,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 次 |
| 最近记录: |