【发布时间】:2011-12-10 21:22:41
【问题描述】:
Scala 提供了 Option[T]、Some[T] extends Option[T] 和 None extends Option[Nothing] 类的层次结构,我发现它们对于包装可以返回 null 的 Java 方法调用很有用:
val result = Option(someJavaMethodThatReturnsNull())
result 的作用类似于零项或一项的序列,具体取决于 Java 方法返回的是对象还是 null。 Option 具有 map、filter 等方法,您可以像在序列上一样使用这些方法,如果原始序列是 Some[T] 或 None,则返回新序列 (Some)如果原件是None。
看起来 Clojure 函数 seq 的行为类似:如果 x 为非空,(seq x) 将是一个项目的序列,如果 x 为空,nil 将是一个序列。然后可以将该值传递给(map ...)、(filter ...) 等,就像Scala 的Option 方法一样。
我错过了什么吗?这种模式有意义吗?这是一个“尤里卡!”对于有经验的 Clojure 程序员来说,这是显而易见的时刻?
【问题讨论】: