Scala - 如何为Option [Int]设置默认值

时间:2018-03-29 11:20:51

标签: scala functional-programming

我想扩展课程Option[Int],以便在0时返回None,如果不是Some,则返回None中的值。我应该如何使下面的代码工作?

Some(10).default // returns 10
Option.empty[Int].default // returns 0

2 个答案:

答案 0 :(得分:7)

您可以使用所需的方法定义隐式类,它包含Option[Int]

implicit class OptionIntExtension(option: Option[Int]) {
  def default: Int = option.getOrElse(0)
}

将此类导入范围时,问题中的代码可以正常工作。

答案 1 :(得分:3)

你可以通过几种方式做到这一点。

使用模式匹配:

val input: Option[Int] = Some(10)

input match {
  case Some(value) => 10
  case None => 0
}

输出:

res0: Int = 10

使用getOrElse

val input: Option[Int] = Some(10)
input.getOrElse(0)

输出:

res1: Int = 10

修改

为了使这个工作像你原来的问题一样,将它弹出到范围内的隐式类中(正如Kolmar建议的那样):

implicit class DefaultExtension(input: Option[Int]) {
  def default: Int = input.getOrElse(0)
}

Some(10).default
res0: Int = 10

Option.empty[Int].default
res1: Int = 0
implicit class DefaultExtension(input: Option[Int]) {
  def default: Int = input match {
    case Some(value) => 10
    case None => 0
  }
}

Some(10).default
res0: Int = 10

Option.empty[Int].default
res1: Int = 0