むらたです。

On 2010/08/11, at 12:57, masayoshi takahashi wrote:

> 2010年8月11日10:20 U.Nakamura <usa / garbagecollect.jp>:
>> In message "[ruby-dev:41976] Re: [Feature #3675] String#prepend, String#>>"
>>   on Aug.10,2010 22:23:13, <matz / ruby-lang.org> wrote:
>>> (2) >> というのは考えてもみなかった面白い記法です。しかし、
>>>    現状の文字列のメソッドで、引数のほうに破壊的な変更を加え
>>>    るメソッドはなかったように思うので、やや躊躇します。もっ
>>>    とも、Stringクラスでなければ、引数に破壊的な変更を加える
>>>    メソッドはいくつもあるので、気にすることではないのかもし
>>>    れません。
>>> 
>>> 他の方のご意見も聞きたいです。
>> 
>> 訓練されたRubyistは>>をメソッドとして見てしまうので「引数の方
>> に破壊的な変更を加える」と思ってしまうわけですが、字面だけ見
>> れば右項が変更されるのは割と素直な解釈なんじゃないかと思いま
>> す。
>> というわけで、悪くないんじゃないでしょうか。
> 
> 訓練されているかどうかはさておき、素直な解釈としては、String#<<との
> 対比が気になります。
> 現状、
> 
> a = "aaa"
> b = "bbb"
> c = "ccc"
> d = a << b << c
> p [a,b,c,d] #=> ["aaabbbccc", "bbb", "ccc", "aaabbbccc"]
> 
> となるわけですが、
> 
> x = "xxx"
> y = "yyy"
> z = "zzz"
> w = x >> y >> z
> p [x,y,z,w]
> 
> 
> ["xxx", "xxxyyy", "xxxyyyzzz", "xxxyyyzzz"]
> となるのでしょうか?
> なんとなく、
> ["xxx", "yyy", "xxxyyyzzz", "xxxyyyzzz"]
> となってほしいような気もするのですが、そうすると結合ルール的に
> 困った感じでしょうか。
> 
> でも、yが破壊されるのも形としては自然なんですかねえ。ちょっと
> 判断しづらいところです。


私は >> はシフト演算子で << と同じく左結合だから (x >> y) >> z の順で
評価されると式を見た瞬間に判断し、y も z も破壊される結果を期待しました。

私が Rubyist としてよりも C/C++ プログラマーとして訓練されている所為かもしれません。

--
Kenta Murata
OpenPGP FP = 1D69 ADDE 081C 9CC2 2E54  98C1 CEFE 8AFB 6081 B062

本を書きました!!
『Ruby 逆引きレシピ』 http://www.amazon.co.jp/dp/4798119881/mrkn-22

E-mail: mrkn / mrkn.jp
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/