From: Shin-ichiro Hara Date: 1999-04-20T17:12:27+09:00 Subject: [ruby-list:13932] Re: destructive methods (Re: Re: What is Object in Ruby?) 原です。 このスレッドはきっぱり「参照関係」を忘れるというスレッドかな。 In message "[ruby-list:13883] destructive methods (Re: Re: What is Object in Ruby?)" on 99/04/19, Yukihiro Matsumoto writes: |In message "[ruby-list:13880] Re: What is Object in Ruby? (Re: Ruby and LISP)" | on 99/04/19, GOTO Kentaro 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 は非破壊的で次のは破壊的? ついでに、 "abc".gsub!(/./, '\&') ってのは効果0の破壊的操作と呼ぶべきか 破壊的でない操作と呼ぶべきか? またまた空論めいてきたけど、、、 新しいアイデアなんですが、破壊的かどうかというのは、言語レベル の話ではないですよね。これは、破壊されたかどうか調べるメソッド が定義できないという意味です。そこで破壊的かどうかの定義をユー ザーまかせするのはどうでしょう。foo? をある一変数のメソッドと して、 a に対する操作の後を a' としたとき、a.foo?(a') が true と思 えるなら「foo?-非破壊的」そうでないなら「foo?-破壊的」呼ぶ #実際に a.foo?(a') をスクリプトの上で実行できるわけではない。 例えば、 class Array1 < Array def foo?; true; end end とすると Array1 インスタンスに対する全ての操作は foo?-非破壊 的です。 ちなみのデフォルト(本質的なという意味はない)の「破壊的」は 「==-破壊的」の事。 「この操作は破壊的ですか?」「何の意味で破壊的か聞いてるの?」 質問に質問で答えるという手です。 これで何が解決されて何が解決されないのだろう?(^^;