Scala提供的類Option[T]
,Some[T] extends Option[T]
和None extends Option[Nothing]
一個層次,我發現有用的包裝Java方法調用,可以返回null
,除其他事項外:Clojure的序列作爲斯卡拉選項的替代品[T]
val result = Option(someJavaMethodThatReturnsNull())
result
的行爲類似於零個或一個項目的序列,具體取決於Java方法是返回對象還是null
。 Option
的方法類似於map
,filter
等,您可以像序列上的那些一樣使用該方法,並返回新序列(Some
),如果原始爲Some[T]
或None
(如果原始爲None
)。
看來,Clojure的功能seq
行爲類似於:(seq x)
將一個項目的序列如果x非空或nil
如果x爲空。這個值可以傳遞給(map ...)
,(filter ...)
等,就像Scala的Option
方法一樣。
我錯過了什麼嗎?這種模式是否有意義?這是一個「尤里卡!」這對於有經驗的Clojure程序員來說顯而易見。
附註:此集合和選項的共享結構(以及更多)在Haskell中通過[Functor]捕獲(http://hackage.haskell.org/packages/archive/base/latest/doc/ html/Data-Functor.html)和[Foldable](http://hackage.haskell.org/packages/archive/base/latest/doc/html/Data-Foldable.html)類。 – qerub