Scala:Option类型的数值运算

时间:2016-08-23 01:38:02

标签: scala option-type

在今年的Devoxx大会上,Dick Wall在Scala编程中提供了presentation设计和模式;第一部分应该是基础知识的简要亮点。在1:09:35,他写了以下函数:

def safeDiv(a: Int, b: Int): Option[Int] = if (b == 0) None else Some(a / b)

返回编译错误[good]。我的问题是因为这是一个相当常见的场景:我怎样才能对

的返回值进行整数运算* / +
safeDiv(6, 2) // Some(2)

类似

safeDiv(6, 2) * 6 // 18 [error]

2 个答案:

答案 0 :(得分:3)

你不能在Int上乘以Option,你绝对应该像Option那样乘以Option的值:

 saveDiv(6, 2).map (_ * 6)  // Returns Option[Int]

或者您可以使用" Pimp我的图书馆"用于定义方法的模式' *'关于Int的选择:

 class PimpedOption(oi:Option[Int]) { 
   def *(i:Int) = oi.map(_*i)
 }

 implicit def instance(oi:Option[Int]) = new PimpedOption(oi)

然后你可以这样做:

 saveDiv(6, 2) * 6 // Gives Option[Int]

答案 1 :(得分:1)

在地图块中执行

saveDiv(6, 2).map(_ * 6)