在今年的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]
答案 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)