まつもと ゆきひろです

In message "[ruby-list:18055] i++ に見る性格の差"
    on 99/10/28, Kazunori NISHI <kazunori / swlab.csce.kyushu-u.ac.jp> writes:

|これを欲しがる人と必要としない人の違いは、「悔しさ」を感じるかどうか?
|という「性格の差」、だと最近思い始めました。(だから仕方がない、とも)

そーですねえ。ま、Rubyが私の趣味と嗜好を反映しているのは事実
です。でもって、メッセージの前の . の前にスペースを置く人に
やさしくないと。

|> カスケードってもしかして
|> 
|>   open(path).instance_eval {
|>      seek(0)
|>      print "foo"
|>      close
|>   }
|> 
|> とおなじもの? なんだ現状でできるじゃん。> 西さん
|
|なんと!なんだ現状でできるじゃん。> まつもとさん。
|でも、.instance_eval が長くて実用的でない(?)ので、
|
|  open(path) {
|     seek(0)
|     print "foo"
|     close
|  }
|
|みたいに書けると最高なのですが、この為には文法の変更が必要ですよね。
|#別にこの書式({})に拘ってる訳ではないです。

そうですね。これだとブロックになっちゃいますね。現状だと

  open(path) {|f| f.seek(0); f.print "foo"; f.close}

という目的に使ってますからこの文法は使えませんね。
instance_evalが長いと言うことならば、

  def x(obj, &block)
    obj.instance_eval(&block)
  end

のような関数xを作って

  x(open(path)) {
    seek(0)
    print "foo"
    close
  }

とか、

  module Kernel
    def x(&block)
      instance_eval(&block)
    end
  end

として

  open(path).x {
    seek(0)
    print "foo"
    close
  }

とかできるんでないかと思います。xには好きな名前をお選びくだ
さいませ。

|ああ、これだと精神衛生上、大変よろしいだろうなぁ。と。
|でも多分、上の書き方でも全然平気なんですよね、まつもとさんは。。。

気持は分からないでもないです。Ruby/Tkではそういうやり方を採
用したこともありますから。でも、selfがすりかわるってのは、結
構イヤらしい問題を引き起こすんですよねえ。

|#別にこの書式({})に拘ってる訳ではないです。
|#object .mes1 ..mes2 ..mes3 とかでも、表記法は何でもいいです。

というような文法ならそういう問題はないんで(ToDoに載ってる方
はこっちをイメージしてます)、ずーっと考えてるんですが(あんま
り一生懸命じゃないけど)、文法が決まらない。

                                まつもと ゆきひろ /:|)