[#29987] ライセンス論点整理 — Tacos <ozaki@...>

38 messages 2001/06/01

[#30030] Ruby license discussion — Masayuki Hatta <mhatta@...>

八田と申します。

23 messages 2001/06/02
[#30034] Re: Ruby license discussion — "Akinori MUSHA" <knu@...> 2001/06/02

At Sat, 2 Jun 2001 14:31:02 +0900,

[#30039] Re: Ruby license discussion — akira yamada / やまだあきら <akira@...> 2001/06/02

[#30056] Re: Ruby license discussion — Takaaki Higuchi <thiguchi@...> 2001/06/03

In "akira yamada / やまだあきら <akira@ruby-lang.org>" wrote:

[#30155] How do we treat local static variables? — IKEGAMI Daisuke <daisu-ik@...>

ruby-list の皆さんこんにちは。

13 messages 2001/06/09
[#30156] Re: How do we treat local static variables? — NISHI Takao <zophos@...9.com> 2001/06/09

にし@おかやまです。

[#30163] FW: [arg1:119] RE: [RubyUnit:4203] Re: インストーラ・プロジェクト — "KANEMITSU Masao" <masao-k@...>

金光です。RAAを改善しませんか?

10 messages 2001/06/10

[#30190] 呼び出し元のクラスを知る方法? — "Shin'ya Adzumi" <adzumi@...>

あづみです。

13 messages 2001/06/11

[#30215] パス文字列を操作するライブラリはありませんか? — "Kaoru Shirai" <shirai@...1jp.com>

 こんにちわ。常日頃 Ruby を愛用させて頂いております。

13 messages 2001/06/13

[#30270] setup.rb — rubikitch@...

るびきちです。

16 messages 2001/06/16
[#30291] Re: setup.rb — Minero Aoki <aamine@...> 2001/06/18

あおきです。すみません、見逃してました。

[#30292] Re: setup.rb — rubikitch <rubikitch@...> 2001/06/19

From: Minero Aoki <aamine@mx.edit.ne.jp>

[#30293] Re: setup.rb — TADA Tadashi <sho@...> 2001/06/19

ただただしです。

[#30305] TMarshal — rubikitch@...

るびきちです。

25 messages 2001/06/19

[#30333] 共同著作物の謎( re :ライセンス) — Tacos <ozaki@...>

13 messages 2001/06/20
[#30334] Re: 共同著作物の謎( re :ライセンス) — Tacos <ozaki@...> 2001/06/20

[ruby-list:30152] Re: TkLabel.new のブロック

From: Koji Arai <JCA02266@...>
Date: 2001-06-08 22:44:52 UTC
List: ruby-list #30152
新井です。

In message "[ruby-list:30150] TkLabel.new のブロック"
  on 09 Jun 2001 07:12:35 +0900,
  Masatoshi SEKI <m_seki@mva.biglobe.ne.jp> wrote:
> 咳といいます。
> 
> 最近tkの練習をはじめました。

> ‥ブロック内のselfがTkLabelのインスタンスのように見えます。
> これはどうやってるんでしょうか? 
> initialize で instance_eval してる??

TkKernel.new が ext/tk/tkutil.c で定義されています。その定義内容は

tk_s_new(argc, argv, klass)

    VALUE obj = rb_class_new_instance(argc, argv, klass);

    if (rb_block_given_p()) rb_obj_instance_eval(0, 0, obj);
    return obj;

です。initialize は、rb_class_new_instance() から呼ばれます。
Ruby で書けばこうかな?(TkKernelがCで実装されている理由をよ
く知らないんですが以下だとなんか穴があるのかな?)

class TkKernel
  def self.new
     obj = super
     obj.instance_eval &Proc.new if block_given?
  end
end

class TkWindow < TkKernel
end

class TkLabel < TkWindow
end

TkLabel.new {|obj| p obj}

以下、某文書から抜粋(^^;

| TkKernel
| 
| TkObjectのスーパークラスです。サブクラスのクラスメソッド newがブロックを持てる
| ように、このメソッドを再定義しています。
| 
| スーパークラス:
| 
| Object
| 
| クラスメソッド:
| 
| TkKernel.new {|obj| ...}
|    
|     TkKernelオブジェクトを生成します。
|    
|     ブロックを指定すると生成したオブジェクトを引数にブロックを実行します。また
|     、そのブロック内のコンテキストではselfは生成したオブジェクトになります。
|    
|     つまり、
|    
| 	  TkKernel.new {|obj| ... }
|    
|     は、
|    
| 	  object = TkKernel.new
| 	  object.instance_eval {|obj| ... }
|    
|     と等価です。
|    
|     TkKernel.new は、Class#newを再定義しています。そのためこの性質は TkKernelの
|     サブクラスにも反映されています。

--
新井康司 (Koji Arai)

In This Thread