[#3747] constants (or class vriable?) — Wakou Aoyama <wakou@...>

青山です。

20 messages 1998/12/06
[#3751] Re: constants (or class vriable?) — Shin-ichro Hara <sinara@...> 1998/12/07

原です。

[#3763] Re: constants (or class vriable?) — Wakou Aoyama <wakou@...> 1998/12/07

青山です。

[#3764] Re: constants (or class vriable?) — matz@... (Yukihiro Matsumoto) 1998/12/08

まつもと ゆきひろです

[#3767] Re: constants (or class vriable?) — kjana@... (YANAGAWA Kazuhisa) 1998/12/08

In message <199812080034.JAA05946@picachu.netlab.co.jp>

[#3826] ruby 1.1d0 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

35 messages 1998/12/16

[#3873] (?: ) does not work? — shugo@... (MAEDA Shugo)

前田です。

15 messages 1998/12/19

[#3881] I want to catch all jump — shugo@... (Shugo Maeda)

前田です。

17 messages 1998/12/21
[#3895] Re: I want to catch all jump — matz@... (Yukihiro Matsumoto) 1998/12/22

まつもと ゆきひろです

[#3894] ruby 1.1d1 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

25 messages 1998/12/22

[#3899] interpreter reinitialization — shugo@... (Shugo Maeda)

前田です。

22 messages 1998/12/22
[#3923] Re: interpreter reinitialization — matz@... (Yukihiro Matsumoto) 1998/12/23

まつもと ゆきひろです

[#3926] Re: interpreter reinitialization — shugo@... (Shugo Maeda) 1998/12/23

前田です。

[#3931] Re: interpreter reinitialization — matz@... (Yukihiro Matsumoto) 1998/12/24

まつもと ゆきひろです

[#3956] Re: interpreter reinitialization — shugo@... (Shugo Maeda) 1998/12/24

前田です。

[#3960] Re: interpreter reinitialization — matz@... (Yukihiro Matsumoto) 1998/12/24

まつもと ゆきひろです

[#4002] config.guess — Koji Arai <JCA02266@...>

新井です。

24 messages 1998/12/26
[#4039] Re: config.guess — matz@... (Yukihiro Matsumoto) 1998/12/29

まつもと ゆきひろです

[#4045] Re: config.guess — Koji Arai <JCA02266@...> 1998/12/31

新井です。

[#4047] Re: config.guess — matz@... (Yukihiro Matsumoto) 1999/01/01

まつもと ゆきひろです

[#4048] Re: config.guess — Koji Arai <JCA02266@...> 1999/01/01

新井です。

[#4049] Re: config.guess — matz@... (Yukihiro Matsumoto) 1999/01/02

まつもと ゆきひろです

[#4050] Re: config.guess — Motoyuki Kasahara <m-kasahr@...> 1999/01/04

笠原です。

[#4030] module Precision — gotoken@... (GOTO Kentaro)

ごとけんです

78 messages 1998/12/28
[#4310] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/21

ごとけんです

[#4311] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/01/21

まつもと ゆきひろです

[#4312] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/21

ごとけんです

[#4317] Re: module Precision — keiju@... (石塚圭樹 ) 1999/01/21

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

[#4364] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/25

ごとけんです

[#4478] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/01/28

まつもと ゆきひろです

[#4506] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/30

ごとけんです

[#4552] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/02/01

まつもと ゆきひろです

[#4557] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/01

ごとけんです

[#4632] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/03

ごとけんです

[#4647] Re: module Precision — keiju@... (石塚圭樹 ) 1999/02/03

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

[#4648] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/03

ごとけんです

[#4633] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/02/03

まつもと ゆきひろです

[#4636] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/03

ごとけんです

[#4836] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/08

ごとけんです

[#4843] Re: module Precision — keiju@... (石塚圭樹 ) 1999/02/08

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

[#4849] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/08

ごとけんです

[#4924] Re: module Precision — keiju@... (石塚圭樹 ) 1999/02/09

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

[#4976] a genericity — gotoken@... (GOTO Kentaro) 1999/02/10

ごとけんです

[#5008] Re: a genericity — keiju@... (石塚圭樹 ) 1999/02/11

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

[#5018] Re: a genericity — gotoken@... (GOTO Kentaro) 1999/02/11

ごとけんです

[#5171] Re: a genericity — keiju@... (石塚圭樹 ) 1999/02/16

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

[ruby-dev:3724] Re: multiple assignment, yield and return

From: Shin-ichro Hara <sinara@...>
Date: 1998-12-01 11:47:32 UTC
List: ruby-dev #3724
原です。

In message "[ruby-dev:3722] multiple assignment, yield and return"
    on 98/12/01, Shin-ichro Hara <sinara@blade.nagaokaut.ac.jp> writes:
|スレッドが長くなったのでさし当たって subject を買えました。

ではなくて、「変」えました。(^^;

第0.2回 Ruby Conference で酔っ払いながら喋っていた yield のモデル
のことを一応書いてておきます。

yield(1, 2) を yield([1, 2]) と Array に変換するのも、ある程
度重いのではないでしょうか。そうでもないのかな。

もっと軽いクラス List みたいのをつくって yield(List.new(1, 2))
にしたらどうでしょう。List のメソッドは [], size, to_a ぐらい
しかないわけです。内容的には Array のサブセットでスーパークラス
相当だけど継承関系は独立なものとして。List は Class ではなくて
ユーザーから見えない ruby の内部的な構造としてもいいと思います。

そして、現在の ruby の中で上の List をエミュレートしたものを作っ
てみるとこんな感じです。

class List
  def initialize(*x); @list = x; end
  def [](x); @list[x]; end
  def to_a; @list; end
  def +(other); List.new(*(self.to_a+other.to_a)); end
  def size; @list.size; end
  def inspect; @list.collect{|x| x.inspect}.join(", "); end
end

class Object
  def to_l
    if is_a? List
      self
    else
      List.new(self)
    end
  end
end

class Hash1
  include Enumerable
  def initialize(h); @body = h; end
  def each; @body.each{|x,y| yield(List(x,y))}; end
end

class Hash2
  include Enumerable
  def initialize(h); @body = h; end
  def each; @body.each{|x,y| yield([x,y])}; end
end

module Enumerable
  def each_with_index(&block)
    i = 0
    each { |x|
      y = x.to_l + i.to_l
      block.call(*y)
      i += 1
    }
  end
end

Hash1.new(1=>2).each_with_index {|x| p x} #=> [1,2, 0]
Hash2.new(1=>2).each_with_index {|x| p x} #=> [[1,2], 0]

ここでは List が Array である @list を使っていて混乱しています
が、本来は Array を利用せずに定義されるべきものです。

もう一度言うと yield(Y) は、Y が2つ以上のリストの時、List(Y)
を渡し、1つの時は Y そのものを渡す、とするわけ。

受ける側 |x| は x が List のインスタンスかどうかで、多重代入
かどうか判断できるわけだから、結局 x.is_a? List というフラグ
を渡しているのと同等なんですがね。

In This Thread