【问题标题】:Are Maybes a good pattern for scala?Maybes 是 scala 的好模式吗?
【发布时间】:2010-06-01 00:57:05
【问题描述】:

一段时间以来,我一直在努力将 scala 与可能返回 null 的 java 方法集成。我想出了以下实用程序,它很有帮助:

// produce an Option, nulls become None
object Maybe {
    def apply[T](t:T) = if (t==null) None else Some(t)
}

Maybe(javaClass.getResultCouldBeNull()).map( result => doSomeWork(result) )

我对这个解决方案有几个问题:

  1. 是否有更好或更标准的模式可供使用?
  2. 我是否在复制已经存在的内容?
  3. 此功能是否存在隐藏问题?

【问题讨论】:

  • 谢谢!我一直在 2.7 中工作,并没有意识到 Option.apply() 存在于 2.8 中。

标签: java scala null option maybe


【解决方案1】:

Scala 的内置 Option 是您打算重新发明的。

在这种情况下:

scala> val sOpt: Option[String] = Option(null)
sOpt: Option[String] = None

【讨论】:

  • 他已经知道 Option 类了。他想要一个使转换变得容易的函数。
  • val sOpt1: Option [String] = Noneval sOpt2: Option [String] = Some ("foo") 应该这样做。
  • 更好:def mb (s: String) : Option [String] = if (s != null) Some (s) else None 会在 2.7.7 上完成
  • @Thomas:很多东西在 2.8 中好多了。这只是众多之一。
  • @Randall 等不及要发布了。但由于我在“生产”中有一个应用程序,所以我仍然在 2.7.7 上。
【解决方案2】:

为什么要费心用它制作一个完整的伴生对象呢?它只是一个函数,所以你不需要将它实现为一个看起来像函数的对象。

object MyUtilities{
  // a whole bunch of other utilities that you use all over can also be put in this class.
  def maybe[T](t:T) = if (t==null) None else Some(t)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    相关资源
    最近更新 更多