在Scala中,您Option[Int]
将拥有Some(number)
或None
拥有在第一种情况下和在另一种情况下isDefined
返回的属性.true
false
在C#中你int?
将拥有a number
或null
拥有在第一种情况下和在另一种情况下HasValue
返回的属性.true
false
Scala Option
与C#是一样的Nullable type
,有什么区别吗?
不,它完全不一样.除了其他答案:
斯卡拉有Option[Option[Int]]
; C#没有int??
.
斯卡拉有Option[String]
; C#没有string?
.
在C#中,有一个隐含的转换T
为T?
; 在Scala中,没有隐式转换T
为Option[T]
(Scala允许您手动定义此类转换,但不建议这样做).
这意味着Option
更加均匀和可组合,?
并且可以更广泛地使用它.例如斯卡拉的Map[K, V].get(K)
回归Option[V]
; 但在.Net中,Dictionary<TKey, TValue>[TKey]
无法返回TValue?
,因为TValue
可以是引用类型.即使是等价的,Option.map
也需要为返回值类型和引用类型的函数分别实现.
我还要重申,get
应该避免!然而,isDefined
当没有跟着时,get
完全没问题.