From: nobu.nakada@... Date: 2002-07-26T03:03:03+09:00 Subject: [ruby-dev:17827] Re: self in block なかだです。 At Thu, 25 Jul 2002 18:07:33 +0900, masaki wrote: > |正木さんが問題提起されたのは「selfのすり替えができるか」とい > |う点と、「ローカル変数の(思わぬ)重複の回避」という点の二つが > |あり、元のdefine_methodの問題は前者に対応したものです。 > > find についても自動的に receiver を Prime に切替えてくれるのか > を知りたかったのですが、動作しているということは、その点につい > ては大丈夫ということですね。 切り替わるというか、findはSequenceのメソッドですから、呼び出さ れるときは当然selfはSequenceのインスタンス(であるPrime)です。途 中でselfを切り替えられない限りは。 > まづ Prime を使う立場で考えると Prime の定義中でどういう変数 > 名が使われているかということは、どうでもよい知る必要のない情 > 報の筈で > > m=10 > > Prime=.... > > Prime.each{|prime| break if prime > m ;p prime} > > の m のかわりに Prime の定義中で使われていない変数名または即 > 値を使えばちゃんと動くけれども、そうでないと意図通りに動かな > いというのはおかしいというのが第一点です。 > この点は誰も反対しないと思います。 それを解決するために {<>...} とかいろいろ提案されてるわけですが、 まだどれも採用されていないので、当然あのコードでは変数名の衝突 の問題は残っています。 > しかし何かの定義を書く時に dummy 変数の名前まで気にしたくない、 > 本来不必要な情報は知らなくてすむようにしてもらいたい、というの > が私の言いたいことなのですが、不思議なことに殆んど賛同してもら > えないようです。 まつもとさんがいってるのは、selfの切り替えとブロックローカル変 数の問題は独立だということだと思うのですが。それともあえて混同 してるのでしょうか。 大方の意見としては、目的についてはともかく、selfの切り替えが適 切な手段とは思えない、ということではないでしょうか。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦