[#17615] substitution at when-clause — Takaaki Tateishi <ttate@...>

立石です.

47 messages 2002/07/01
[#17619] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/01

まつもと ゆきひろです

[#17621] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/02

At Tue, 2 Jul 2002 02:54:01 +0900,

[#17622] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/02

まつもと ゆきひろです

[#17624] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/02

At Tue, 2 Jul 2002 13:30:17 +0900,

[#17627] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/02

まつもと ゆきひろです

[#17630] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/02

立石です.

[#17631] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/02

まつもと ゆきひろです

[#17635] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/03

立石です.

[#17639] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/03

まつもと ゆきひろです

[#17644] Re: substitution at when-clause — keiju@... (石塚圭樹) 2002/07/03

けいじゅ@日本ラショナルソフトウェアです.

[#17645] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/03

まつもと ゆきひろです

[#17647] Re: substitution at when-clause — keiju@... (石塚圭樹) 2002/07/03

けいじゅ@日本ラショナルソフトウェアです.

[#17649] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/03

At Wed, 3 Jul 2002 17:48:58 +0900,

[#17651] Re: substitution at when-clause — keiju@... (石塚圭樹) 2002/07/03

けいじゅ@日本ラショナルソフトウェアです.

[#17730] Re: self in block — masaki <GEC01122@...>

16 messages 2002/07/20

[#17764] Re: self in block — masaki <GEC01122@...>

31 messages 2002/07/22
[#17765] Re: self in block — matz@... (Yukihiro Matsumoto) 2002/07/23

まつもと ゆきひろです

[#17768] Re: self in block — Tanaka Akira <akr@...17n.org> 2002/07/23

In article <1027383423.558649.31176.nullmailer@picachu.netlab.jp>,

[#17769] Re: self in block — matz@... (Yukihiro Matsumoto) 2002/07/23

まつもと ゆきひろです

[#17770] Re: self in block — Tanaka Akira <akr@...17n.org> 2002/07/23

In article <1027404202.545188.1283.nullmailer@picachu.netlab.jp>,

[#17771] Re: self in block — matz@... (Yukihiro Matsumoto) 2002/07/23

まつもと ゆきひろです

[#17772] Re: self in block — Tanaka Akira <akr@...17n.org> 2002/07/23

In article <1027406979.880878.1358.nullmailer@picachu.netlab.jp>,

[#17832] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — nobu.nakada@...

なかだです。

17 messages 2002/07/26
[#17835] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — matz@... (Yukihiro Matsumoto) 2002/07/26

まつもと ゆきひろです

[#17837] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — nobu.nakada@... 2002/07/26

なかだです。

[#17842] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — matz@... (Yukihiro Matsumoto) 2002/07/26

まつもと ゆきひろです

[#17886] line number(Re: Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG.) — nobu.nakada@... 2002/08/02

なかだです。

[#17893] Re: line number(Re: Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG.) — matz@... (Yukihiro Matsumoto) 2002/08/03

まつもと ゆきひろです

[#17897] Re: line number(Re: Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG.) — nobu.nakada@... 2002/08/03

なかだです。

[#17973] Re: line number(Re: Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG.) — nobu.nakada@... 2002/08/11

なかだです。

[ruby-dev:17730] Re: self in block

From: masaki <GEC01122@...>
Date: 2002-07-20 12:27:58 UTC
List: ruby-dev #17730
正木です。

From: Minero Aoki <aamine@mx.edit.ne.jp>
Subject: [ruby-dev:17727] Re: self in block
Date: Sat, 20 Jul 2002 15:02:10 +0900
> 
> そしてなぜ self の変更がいやなのかというと、オブジェクトのカプ
> セル化原則に違反するからです。self がそのオブジェクトになると
> いうことは、インスタンス変数を参照でき private メソッドを呼び
> 出せるということです。たとえば次のように。
> 
>   class C
>    def initialize
>      @secret = 'ひみつのデータ'
>    end
>
>    def once
>      yield
>    end
>   end
>
>   C.new.once {<dummy>
>      p @secret     # 参照できてしまう!
>   }
>
>イテレータを定義しただけでカプセル化が崩れてしまうのではオブジェ
>クト指向プログラム言語である意味が半分以上なくなってしまいます。

いまの Ruby でも

  class C
    def eval_yield
      eval yield
    end
  end

  C.new.eval_yield { "p @secret"  }

あるいは eval を使わなくても

  class C
    def secret
      p @secret
    end
  end
  C.new.secret


とすれば、同じことができます。これが駄目だということになると、Ruby を
全面的に書き換えなければいけなくなります。
class method の追加が禁止されてない以上、Ruby にはそういう意味での
情報隠蔽はもともと無いと思っています。
私自身は上記のことがあっても Ruby が駄目な言語だとは全く思いません。

私が情報隠蔽で重要だと思うのは情報を得る方法をなくすことではなく、
不必要な情報は知らなくても良いようにするということです。
現在の block の仕様に異和感をおぼえたのは block 内変数の scope が 
scope 内だけの情報では決まらないと言う点でした。この場合我々は
本来知る必要のない外部情報を知ることを強いられるわけです。
私の block の仕様についての提案は、上の意味での情報隠蔽を徹底することを
目指したものです。

(情報隠蔽という言葉の使い方が間違っているかも知れませんが、素人の
誤解だと思って御容赦ください)


>> object.method(){<x,...> ...}
>> 
>> で呼ばれる method の定義
>>   def method(...)
>>     ...
>>   end
>> のなかでは self はこの method を呼んだ object を指すわけですから
>> block 内の self が別の物を指す方が不自然な気がします。
>
> 「それは自然だ」という言葉は「それは不自然だ」と言うのとまった
> く同じく根拠薄弱です。なぜ不自然なのか教えていただかないと納得
> できません。
>
> ぼくは「ブロックの self をすりかえてしまうのはオブジェクト指向
> の原則に反する」という根拠を示したので、それを覆すだけの「根拠」
> を示していただきたいです。

   def method(...,&block)
     ... self ...
   end
この段階の情報で block 中の self が何を指すかを決めろと言われたら、
method 中の self しか無いわけで、これが任意の object に成りうる
という現在の仕様の方が self のすりかえではないでしょうか?



> それで、いま想定しているのは不定のオブジェクトからブロックが呼
> ばれる場合なんですよね。つまりブロックを作ったところからはあず
> かり知らぬオブジェクトが caller であるということです。このとき

これは全然違います。

Sequence.new(){... }
の場合 object が Sequence の instance であることははっきりしています。
不定なのは、この文が置かれる場所の context です。
これは object 自身にとっては不必要な情報です。
私の提案はこの不必要な情報の隠蔽が目的です。

In This Thread

Prev Next