当我想切换函数和对象时,我可以使用scalaz
|>
运算符,这样可以获得更多的可读性。让我给你介绍一个模型函数:
def length2(x:String) = x.length * 2
现在,我可以用两种方式编写它:"aoeu" |> length2
length2("aoeu")
但是如果我更通用地定义这个函数,它就会停止工作。def length2(x:SeqLike[_
,_
]) = x.length * 2
length2("aoeu") // ok
"aoeu" |> length2 // doesn't work
为什么编译器不理解这个?String
在 trait中肯定存在从某个类混合的隐式转换SeqLike
。