ごとけんです

In message "[ruby-list:13932] Re: destructive methods (Re:  Re: What is Object in Ruby?)"
    on 99/04/20, Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp> writes:

>原です。
>
>このスレッドはきっぱり「参照関係」を忘れるというスレッドかな。

`What is Object?' では一般的すぎるということでわ??

>そんじゃオブジェクトの振る舞いも一切変わらないし、他のオブ
>ジェクトの状態にも影響がない場合はどうでしょう。
>
>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 の挙動が違うといったら怒る??

>"abc".gsub!(/./, '\&') ってのは効果0の破壊的操作と呼ぶべきか
>破壊的でない操作と呼ぶべきか?
>
>またまた空論めいてきたけど、、、

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

# id なんてモノがみえるのが気持ち悪い…でも便利

>新しいアイデアなんですが、破壊的かどうかというのは、言語レベル
>の話ではないですよね。これは、破壊されたかどうか調べるメソッド
>が定義できないという意味です。

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

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

>                              そこで破壊的かどうかの定義をユー
>ザーまかせするのはどうでしょう。foo? をある一変数のメソッドと
>して、
>
>  a に対する操作の後を a' としたとき、a.foo?(a') が true と思
>  えるなら「foo?-非破壊的」そうでないなら「foo?-破壊的」呼ぶ

げげ、数学だなぁ…すがすがしい (^^;; 

>ちなみのデフォルト(本質的なという意味はない)の「破壊的」は
>「==-破壊的」の事。
>
>「この操作は破壊的ですか?」「何の意味で破壊的か聞いてるの?」
>質問に質問で答えるという手です。

でわ質問:「IO#gets は ==-破壊的ですか??」

>これで何が解決されて何が解決されないのだろう?(^^;

解決されることは要求される破壊基準が明確にされること??
解決されないのは、俺的破壊的はいつも定義する用意があるの
に対し、foo?-破壊的は未定義の余地が常にあること??  まぁ、
僕のもfoo?-破壊的のひとつなんだけど。

-- gotoken