【发布时间】:2014-09-29 07:47:42
【问题描述】:
例如,我们定义了一个函数,应该将 1、3、42 分别转换为 "foo"、"bar"、"qix" 和所有其他整数到 "X"。
我提出了 2 个实现:
方法f 需要分开,因为它可以在其他上下文中重用。
def f(i: Int): Option[String] = i match {
case 1 => Some("foo")
case 3 => Some("bar")
case 42 => Some("qix")
case _ => None
}
def g(i: Int) : String = f(i).getOrElse("X")
还有:
def f_ : PartialFunction[Int, String] = {
case 1 => "foo"
case 3 => "bar"
case 42 => "qix"
}
def g_(i: Int) : String = f_.orElse { case _ => "X" }(i)
我更喜欢第二种,因为它避免了许多重复的 Some(...)
WDYT ?
【问题讨论】:
-
没有人说你必须在比赛中使用
Some -
请注意,您可以解除部分功能。在你的情况下
f_.lift == f