Scala-如何为选项[Int]设置默认值而不是无

Scala-如何为选项[Int]设置默认值而不是无,scala,functional-programming,Scala,Functional Programming,我想扩展类选项[Int]使其在None时返回0,如果不是None则返回Some中的值。我应该如何使下面的代码工作 Some(10).default // returns 10 Option.empty[Int].default // returns 0 您可以使用所需的方法定义隐式类,该方法封装了选项[Int]: implicit class OptionIntExtension(option: Option[Int]) { def default: Int = option.getOrE

我想扩展类
选项[Int]
使其在
None
时返回
0
,如果不是
None
则返回
Some
中的值。我应该如何使下面的代码工作

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

您可以使用所需的方法定义隐式类,该方法封装了
选项[Int]

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

当这个类被导入到作用域中时,问题中的代码就会起作用。

您可以通过几种方法来实现这一点

使用模式匹配:

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

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

res0: Int = 10
res1: Int = 10

使用
getOrElse

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

res0: Int = 10
res1: Int = 10

编辑

要使其像您最初的问题一样工作,请将其放入范围中的隐式类中(正如Kolmar所建议的):



也许你只是在寻找这个?:
None.getOrElse(0)
?@XavierGuihot我认为在实际代码中,这将是最正确的决定,但对于我的任务,我必须准确地扩展选项[Int](使我的问题中的代码可行)。这将是很困难的。一个肮脏的解决方案是在类中封装一个选项,重新定义方法(get,…)来调用封装的选项方法,并包括
默认值
方法。@XavierGuihot谢谢,我会朝这个方向看。我需要使我的问题中的代码可行,如果在隐式类中使用,这个决定会起作用,谢谢。我修改了我的答案以纳入科尔马的建议。希望这有帮助!