Haskellで$のようにScalaで演算子の優先順位を強制する方法はありますか?例えば、Haskellで、あなたは
を持っている:
a b c = ((a b) c)
と
a $ b c = a (b c)
はScalaでこれを行うには同様の方法はありますか? Scalaには演算子自体はありませんが、同様の効果を得る方法はありますか?
Haskellで$のようにScalaで演算子の優先順位を強制する方法はありますか?例えば、Haskellで、あなたは
を持っている:
a b c = ((a b) c)
と
a $ b c = a (b c)
はScalaでこれを行うには同様の方法はありますか? Scalaには演算子自体はありませんが、同様の効果を得る方法はありますか?
infix vs。
(all letters)
|
^
&
< >
= !
:
+ -
*/%
(all other special characters)
名前は通常、これを利用するために明示的に選択することができます
a b c d == a.b(c).d
a.b c d == a.b.c(d)
a b c.d == a.b(c.d)
Scalaはまた、中置記法で使用される演算子のための固定された優先順序を持つ:表記法は、多くの場合、優先度を制御するために同様の方法で使用されています。たとえば、標準パーサライブラリの~
と^^
です。
同様の効果を得るために暗黙的に使用することは可能です。例えば:名前がで終了する必要があるため、このシステムを利用し (未テストが、このようなものでなければなりません)
object Operator {
class WithOperator[T](that: T) {
def &:[U](f: T => U) = f(that)
}
implicit def withOperator[T](that: T) = new WithOperator(that)
}
、あなたは、名前の$を使用することはできません:(結合性を修正する)とドルは通常の識別子(演算子の識別子ではない)なので、アンダースコアで区切らない限り、a:と同じ名前にすることはできません。
どのように使用しますか?このように:
val plusOne = (x: Int) => {x + 1}
plusOne &: plusOne &: plusOne &: 1
Scalazは "pipe"演算子を定義していますが、これは同様の動作をしますが、引数を反転して動作します。 switch function and object with scalaz' |>
説明を残していないファンタムのダウンローダによって再び追求されました...最も奇妙な –
素敵なコードスニペット最初の1つ - 私はこれらのルールを思い出させるために便利です。ありがとう –