原です。

In message "[ruby-list:13946] Re: destructive methods (Re:  Re: What is Object in Ruby?)"
    on 99/04/20, GOTO Kentaro <gotoken / math.sci.hokudai.ac.jp> writes:
|
|ごとけんです

|>そんじゃオブジェクトの振る舞いも一切変わらないし、他のオブ
|>ジェクトの状態にも影響がない場合はどうでしょう。
|>
|>class Foo1
|>  def push(x); @var = x; end
|>  undef inspect; undef to_s # etc...
|>end
|>class Foo2 < Foo1; attr :var; end
|>
|>foo1 = Foo1.new; foo1.push 0
|>foo2 = Foo2.new; foo2.push 0
|>
|>このとき最初の push は非破壊的で次のは破壊的?
|
|主義をまだ変えてないので Ruby では俺的破壊的です。
|# instance_eval の挙動が違うといったら怒る??

その手のものは全て etc... で undef していると思って下さい。(^^;

|いやこの手のものでちょっと悩むのがありまして、例えば 
|Class#new は破壊的かという問題です。何故こんなのが破壊的
|かと問われたならば、それは次に生成されるオブジェクトの 
|id に影響を及ぼすからです。むー、これは副作用なのか。再
|現性はあるけど、あるインタプリタで実行したときのはなしと
|いうことで言語的な副作用じゃないかも知れない。むむー

なるほど微妙なケースですね。きっとまつもとさん的に副作用で
すね。

id ってのはちょっとメタプログラミング入ってますよね。

|分かっておられると思うのだけど、僕は言語仕様に出てくる言
|葉だけで語れることを言語レベルと言っています。実現可能性
|は込めてませんが判断可能性は追求しようとしてます。

はい。

|ちなみに id の変化にまつわることだけクリアすれば「絶対非
|破壊的メソッド」を設計する技法は開発可能だと思ってます。

なんですかそれ?

class Object
  def identity; self; end
  def ignore(*x); nil; end
end

なんてのとは違うんですよね。

|>「この操作は破壊的ですか?」「何の意味で破壊的か聞いてるの?」
|>質問に質問で答えるという手です。
|
|でわ質問:「IO#gets は ==-破壊的ですか??」

素朴に答えると、IO#== は Object#== をそのまま使っているの
で id だけで判断されるから「==-破壊的」でない。それが気に
入らないなら自分で == を定義し直して下さい、って所かしら。

|>これで何が解決されて何が解決されないのだろう?(^^;
|
|解決されることは要求される破壊基準が明確にされること??
|解決されないのは、俺的破壊的はいつも定義する用意があるの
|に対し、foo?-破壊的は未定義の余地が常にあること??  まぁ、

そうなんです未定義の余地がある。
#そうかあ「俺的」の方は定義する用意があるのか。