関数とオブジェクトを切り替えるときに少し読みやすくすることができる場合は、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
から形質のある種の混合への暗黙の変換は間違いなく
SeqLike
です。
トリッキー。最初は、一度に1つしか暗黙的にすることはできないと思っていましたが、今はどこかに隠されている分散問題であるようです... – Debilski
@Debilski、スカラズで '|>'がどこに定義されているのかわかりませんが私は自分自身を定義しようとしましたが、 "唯一の暗黙のルール"はそれが適用できないものだと思います。 "aoeu"は '|>'メソッドで暗黙的にクラスに変換し、次に 'SeqLike'に再度変換する必要があります。 – huynhjl
エラーメッセージを表示します。誰もがScalazをすぐに利用できるわけではありませんが、通常、エラーメッセージは何がうまくいかないかを説明します。 –