西@九大です。

From: matz / netlab.co.jp (Yukihiro Matsumoto)
> どういう文法がよいんですか?

難しいのですが、叩き台として、いくつか考えて見ました。
以下、それぞれの提案において、
  obj.xxx
  obj.yyy
  obj.zzz
を如何に連結するかを例示します。

[1] cascading を表す記号を導入する。(Smalltalk では ';' が用いられる)
  Ruby では ';' は既に文の区切りの意味を持つので、仮に ':' とすると、

    obj.xxx : .yyy : .zzz

  何か読み難い。そもそも、'.' が「メッセージを表す」と解釈すれば、これ
  は冗長。という事で、その解釈はそのままにして、さらに、、、

[2] ':'(仮)が「cacading を表す」と解釈。

    obj.xxx : yyy : zzz
    obj.xxx:yyy:zzz      # これだと intern になるからダメ。
    obj.xxx~yyy~zzz      # じゃあ '~' とか?
    obj.xxx..yyy..zzz    # '..' を cascading と見なすとか?

[3] 括弧でくくる。

    obj(.xxx; .yyy; .zzz)

  引数と区別できないので却下。'.' が分離されている感があるのも嫌。

[4] ブロック形式で渡す。

    obj {xxx; yyy; zzz}

これは、Tk にヒントを得てるんですが、

  widget = TkSomeWidget.new
  widget.relief('raised')
  widget.width(30)
  widget.height(20)

と書くのが面倒(?)だから、

  widget = TkSomeWidget.new {
    relief('raised'); width(30); height(20)
  }

と書けるようになっている精神は、cascading messages そのものだと思うの
で(厳密には受け手が違うけど)、その類似性からもこのブロック形式による表
記[4]に気持ちが動いています。Ruby の文法的にも合っている気がするので。

> # instance_evalは日常的に使うには危険すぎ。

はい。

> 取り下げを確認しました。CVS版では実装してあったんですけど外
> しましょうね。

お手数をおかけします。惜しい気もしますが、やはり「pop(n) が持つ一意的
な意味」という壁(問題)を崩せないので。マニュアルに明記する、という最後
の手段も無い事もないけど、pop(1) と pop の違いも多少辛いし。

> ものなら十分でしょうが。spliceがそうかどうかは不明。
> Perlの配列とRubyのArrayでは性質がちょっと違うから。

了解しました。「あった方が明確に嬉しい極面がある」というのは大事ですね。
(それ自身、かなり説得力を持ちますね。(メモメモ))。

------------------------------------------------------------------
九州大学大学院システム情報科学研究科 情報工学専攻 博士後期課程三年
      西 和則   ( e-mail: kazunori / swlab.csce.kyushu-u.ac.jp )
------------------------------------------------------------------