原です。

カスケーディングについては、何度か話題になってますね。

In message "[ruby-dev:8845] cascading messages"
    on 00/01/06, Kazunori NISHI <kazunori / swlab.csce.kyushu-u.ac.jp> writes:
|
|西@九大です。

|[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 と同じではないでしょうか。

私の提案としては、カスケードといえないのですが、

[5] identity の導入

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

というのを挙げます。もちろん

  def identity
    if iterator?
      yield self
    end
    self
  end

に過ぎないのですけど。