連想操作があり>>ます。問題は、そのコストが左側のオペランドのサイズに線形に依存することです。したがって、 likeの一連のn適用によって形成される式>>
a >> a >> a >> a >> a >> ... >> a
nデフォルトでは中置演算子は左結合であるため、 に関して二次コストがあります。そのような式のコストが線形に保たれるように右結合にする方法はn?
連想操作があり>>ます。問題は、そのコストが左側のオペランドのサイズに線形に依存することです。したがって、 likeの一連のn適用によって形成される式>>
a >> a >> a >> a >> a >> ... >> a
nデフォルトでは中置演算子は左結合であるため、 に関して二次コストがあります。そのような式のコストが線形に保たれるように右結合にする方法はn?
解決策を見つけました。Scalaリファレンスは、セクション6.12.3 Infix Operationsで述べています。
演算子の結合性は、演算子の最後の文字によって決まります。コロン「:」で終わる演算子は右結合です。他のすべての演算子は左結合です。
したがって、名前を に変更>>するだけで十分でした>>:。
が に脱糖されている間、a >> bに脱糖されていることに気付くのに少し時間がかかりました。だから私は次のように定義しなければなりませんでしたa.>>(b)a >>: bb.>>:(a)>>:
def >>:(x: T): T = x >> this