例如,我希望在我的长表达式结尾处得到x * (x - 1)
,而不将其分成两行并引入不必要的变量。我可以用简单的隐含来实现它:
scala> implicit class Rich[T](x: T) { def let[U](f: T => U) = f(x)}
defined class Rich
scala> List(1,2,3).map(_ + 1).sum.let(x => x * (x - 1))
res199: Int = 72
但Scala,Scalaz,Twitter Utils还是其他一些图书馆中是否存在任何内置隐含内容?
答案 0 :(得分:3)
Scalaz将其作为part of its IdOps
implicits。它被称为|>
。
long.complex(expression) |> { x => x*(x+1) }
也就是说,将所有Scalaz拉入单线程中效率有点低。
此外,不要忘记match
已经以这种方式工作,只是尴尬的优先。
((long.complex(expression)) match { case x => x*(x+1) })
由于这种尴尬,它并没有好多少(尽管它比每个其他替代方案更有效,至少在优化器改进一点之前)
Some(long.complex(expression)).map(x => x*(x+1)).get
你也可以
long.complex(expression) :: Nil map (x => x*(x+1)) head
如果你愿意打开一元后缀操作符。
答案 1 :(得分:1)
我发现的最接近的方式是:
import scalaz.syntax.std.option._
scala> List(1,2,3).map(_ + 1).sum.some.map(x => x * (x - 1)).get
res201: Int = 72