【发布时间】:2018-04-18 18:24:23
【问题描述】:
我一直在关注Crystal 的官方文档,但找不到任何详细信息。声明联合类型时的常规语法是String | Int32。但是,我注意到 Nil 类型有所不同。
声明联合的常规方式仍然有效:
def foo(id : String | Nil)
end
# Overloads are:
# - foo(id : String | Nil)
但是,我也看到了一个缩短的语法,但我找不到任何文档:
def foo(id : String?)
end
# Overloads are:
# - foo(id : String | ::Nil)
结果几乎完全一样,除了Nil如果前缀有2个冒号。我猜这与Nil 的全局范围有关,因为我在其他语言中看到过类似的语法。
-
String | Nil和String?是同一个东西吗?什么时候应该使用一个和另一个? - 类型签名中的两个冒号是什么意思(例如
::Nil)?
【问题讨论】: