2013-03-13 15 views
24

私は連想操作>>を持っています。問題は、そのコストが左辺のオペランドのサイズに線形に依存することです。デフォルトでは中置演算子はleft-associativeがあるので、そう表現は、右結合式挿入演算子の作成方法は?

a >> a >> a >> a >> a >> ... >> a 

それはnの面で二次コストを持っているよう>>nアプリケーションのシーケンスによって形成されます。そのような表現のコストがnの点で線形に保たれるように、それを右結合にする方法は?

+0

私は自己解答が一般的に奨励されていることを知っている。これは質問と回答の両方を同時に投稿する場合にも適用されますか?私は答えを投稿しようとしていましたが、あなたがより良い答えを用意して以来、これは時間の無駄でした。両方の質問と回答は非常によく書かれていますが、これは何とかよく知られている事実を評判に変える印象を残していますか?それにもかかわらず、フレーズ*は実現するのに時間がかかりました... *アイロニーの素敵な感触を加える:)。 – bluenote10

+2

@ bluenote10答えを得ずにSOを検索したので、質問を書くことにしました。私はそれをほぼ準備していましたが、解決策を見つけようとするのをためらってもう少し調べようとしました。私は ':'の使用についていくつかの発言をしました。そして、私は最終的にScalaのリファレンスで解決策を見つけ、私の場合にはうまく機能させました。質問を破棄して結果を共有しないようにするのはちょっと無駄だったので、両方を(同時に)投稿しました。 –

+0

私はそれがSOに価値を加えることに全く同意します(両方をupvoted)。私はちょうどOPが本当に答えを探していると仮定して、ユーザーに少し迷惑をかける可能性があるので、これが正式に奨励されているかどうかを知りたいと思っていました。それに関する正式な情報は見つかりませんでした。 – bluenote10

答えて

42

解決策が見つかりました。 Scalaの参照が6.12.3中置演算で述べている:

アソシエオペレータのは、オペレータの最後の文字によって決定されます。演算子 がコロン ':'で終わるものは右結合です。その他の演算子はすべて左結合です。

>>>>:に変更するだけで十分でした。

a >> ba.>>(b)に変更しましたが、a >>: bb.>>:(a)に変更しました。だから私は>>:と定義しなければならなかった。

def >>:(x: T): T = x >> this 
関連する問題