[#13493] yield *[[]] — Tanaka Akira <akr@...17n.org>

しばらく前に、yield *[[]] の挙動に関して bug report をして、まつもとさ

96 messages 2001/06/07
[#13494] Re: yield *[[]] — nobu.nakada@... 2001/06/07

なかだです。

[#13496] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/08

In article <200106071409.XAA21101@sharui.nakada.kanuma.tochigi.jp>,

[#13503] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/08

まつもと ゆきひろです

[#13506] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/08

In article <991988462.179562.20598.nullmailer@ev.netlab.zetabits.com>,

[#13512] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/08

まつもと ゆきひろです

[#13497] Re: yield *[[]] — Shugo Maeda <shugo@...> 2001/06/08

前田です。

[#13500] Re: yield *[[]] — "K.Kosako" <kosako@...> 2001/06/08

Shugo Maedaさんの<87lmn336s3.wl@localhost.netlab.jp>から

[#13501] Re: yield *[[]] — Shugo Maeda <shugo@...> 2001/06/08

前田です。

[#13504] Re: yield *[[]] — "K.Kosako" <kosako@...> 2001/06/08

Shugo Maedaさんの<87hexr316u.wl@localhost.netlab.jp>から

[#13505] Re: yield *[[]] — Shugo Maeda <shugo@...> 2001/06/08

前田です。

[#13511] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/08

まつもと ゆきひろです

[#13526] Re: yield *[[]] — Shugo Maeda <shugo@...> 2001/06/09

前田です。

[#13530] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/09

In article <m38zj242y9.wl@localhost.localdomain>,

[#13549] Re: yield *[[]] — Shin-ichiro HARA <sinara@...> 2001/06/12

原です。

[#13553] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/12

In article <4.3.2-J.20010612154813.02c89a70@blade.nagaokaut.ac.jp>,

[#13554] Re: yield *[[]] — Shin-ichiro HARA <sinara@...> 2001/06/12

原です。

[#13560] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/13

In article <4.3.2-J.20010612185543.00c8b988@blade.nagaokaut.ac.jp>,

[#13567] Parallel Assignment — Shin-ichiro HARA <sinara@...> 2001/06/13

原です。

[#13577] Re: Parallel Assignment — matz@... (Yukihiro Matsumoto) 2001/06/13

まつもと ゆきひろです

[#13561] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/13

まつもと ゆきひろです

[#13566] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/13

In article <992410104.066682.22743.nullmailer@ev.netlab.zetabits.com>,

[#13591] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/14

In article <hvor8wo501g.fsf@flux.etl.go.jp>,

[#13597] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/14

まつもと ゆきひろです

[#13598] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/15

In article <992533086.935976.4066.nullmailer@ev.netlab.zetabits.com>,

[#13616] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/19

まつもと ゆきひろです

[#13622] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/22

まつもと ゆきひろです

[#13628] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/23

まつもと ゆきひろです

[#13633] Re: yield *[[]] — keiju@... (石塚圭樹) 2001/06/24

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

[#13647] Re: yield *[[]] — "KANEMITSU Masao" <masao-k@...> 2001/06/25

金光です。

[#13650] Re: [ruby-ext:01803] Re: Ruby/SDL on PS2 LinuxKit — WATANABE Hirofumi <eban@...>

わたなべです。

56 messages 2001/06/26
[#13653] Re: [ruby-ext:01803] Re: Ruby/SDL on PS2 LinuxKit — matz@... (Yukihiro Matsumoto) 2001/06/26

まつもと ゆきひろです

[#13659] library search path — matz@... (Yukihiro Matsumoto) 2001/06/26

まつもと ゆきひろです

[#13906] Re: library search path — nobu.nakada@... 2001/07/16

なかだです。

[#13978] Re: library search path — nobu.nakada@... 2001/07/21

なかだです。

[#13990] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/22

まつもと ゆきひろです

[#14002] Re: library search path — nobu.nakada@... 2001/07/23

なかだです。

[#14011] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/23

まつもと ゆきひろです

[#14017] Re: library search path — "U.Nakamura" <usa@...> 2001/07/24

こんにちは、なかむら(う)です。

[#14020] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/24

まつもと ゆきひろです

[#14036] Re: library search path — nobu.nakada@... 2001/07/24

なかだです。

[#14075] Re: library search path — nobu.nakada@... 2001/07/25

なかだです。

[#14079] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/25

まつもと ゆきひろです

[#14090] Re: library search path — nobu.nakada@... 2001/07/25

なかだです。

[#14095] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/26

まつもと ゆきひろです

[#14115] Re: library search path — akira yamada / やまだあきら <akira@...> 2001/07/26

[#14121] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/26

まつもと ゆきひろです

[#14136] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/27

まつもと ゆきひろです

[#14137] Re: library search path — nobu.nakada@... 2001/07/27

なかだです。

[#14138] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/27

まつもと ゆきひろです

[#14141] Re: library search path — nobu.nakada@... 2001/07/27

なかだです。

[#14142] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/27

まつもと ゆきひろです

[#14148] Re: library search path — nobu.nakada@... 2001/07/28

なかだです。

[#13666] net/http.rb warnings — nobu.nakada@...

なかだです。

14 messages 2001/06/26

[#13668] ruby_m17n make error — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

43 messages 2001/06/26
[#14038] Re: m17n ruby 特に TRON 文字コード — "TOYOFUKU Chikanobu" <toyofuku@...> 2001/07/24

豊福です。

[#13705] eval(code, true, filename) — Shugo Maeda <shugo@...>

前田です。

14 messages 2001/06/29

[ruby-dev:13616] Re: yield *[[]]

From: matz@... (Yukihiro Matsumoto)
Date: 2001-06-19 07:33:19 UTC
List: ruby-dev #13616
まつもと ゆきひろです

In message "[ruby-dev:13598] Re: yield *[[]]"
    on 01/06/15, Tanaka Akira <akr@m17n.org> writes:

|で、実際の挙動をほんのすこし調べてみたところ、奇妙に思える挙動が発見さ
|れました。
|
|% ruby -e 'class A; def f(a); p a; end; end; A.new.method(:f).to_proc.call([1])'
|1
|% ruby -v
|ruby 1.7.1 (2001-06-07) [i386-freebsdelf4.2]

|(なお、1.6.4 でも 1 になるが、なぜか 1.6.2 では [1] になる。)

[ruby-dev:13299]の副作用ですね。

|* 単値の入口から単値の出口へデータが通過する場合、代入(多重代入)のよう
|  な挙動をすること。(代入の挙動自体が議論中ではありますが。)
|* 多値の入口から多値の出口へデータが通過する場合、通常のメソッド呼び出
|  しのような挙動をすること。
|* 単値の入口から多値の出口へデータが通過する場合、変換が一回だけ起こること。
|* 多値の入口から単値の出口へデータが通過する場合、変換が一回だけ起こること。
|* wrapper を定型的に記述可能なこと。
|* 単値から多値への変換は一種類であること。
|* 多値から単値への変換は一種類であること。(Proc#call と Proc#yield で
|  異なるとすればこれは無理?)
|
|ただし、希望を満たす仕様がちゃんと存在するかどうか私にもわからないので、
|かなわない希望なのかも知れないんですが...

つらつらと考えてみました。

 * 単値と呼ばれているものは実は2種類ある。

 * 片方はすべて配列で表現されるもので、多値と呼ばれているも
   のと完全に対応する(たとえばメソッドの引数を*argsで受けた
   場合や代入左辺の*aなど)。

 * もうひとつは、0要素の多値をnil、1要素の多値をその要素自身、
   2要素以上の多値をその要素を持つ配列で表現したものである。

 * 多値と前者は同一視してかまわない。

 * Rubyで一般的に用いられている単値は後者である。

 * ここでは説明のため仮に前者にmvalue(multiのm)、そして後者
   にsvalue(singleのs)と名前を付ける。

 * 問題になる点はmvalueとsvalueが1対1対応できない点である。

   たとえば、現在の変換方法ではmvalueの[]と[nil]は両方とも
   svalueのnilに変換される。svalueの[1]はmvalueの[1]に変換す
   べきか、[[1]]に変換すべきか状況によって異なる(が、判断す
   る情報が既に落ちている)。

 * 問題になるのはmvalueにおいて要素がひとつだけで、かつその
   唯一の要素がnilまたは配列である場合だけである。

と、ここまで考えて

 * 現状で情報が欠損しているなら、残してやれば良い。

   つまり、mvalueにおいて要素がひとつだけで、その要素がnilま
   たは配列である場合を特別扱いすれば良い。具体的にはsvalue
   への変換で、[1]は1に変換するものの、[nil]や[[1]] は変換せ
   ずにそのままsvalueとする。

というのはどうだろうと考えました。以前のtest suiteとは互換性
がないですが、まあ、それ自身で筋が通っているならそれはそれで
良かろうと考えました。

で、実践してみたのですが、やや問題が残りました。

  def each2(&block); [[2]].each {|*x| p x; block.call(x)}; end
  each2{|x|p x}

  def each3(&block); [[2]].each {|x| p x; block.call(x)}; end
  each3{|x|p x}

のようなケースで互換性がないのです(配列の配列が渡るため、変
換が発生せず、xに[[2]]が代入されてしまう)。そこで、yieldでブ
ロックパラメータが単純代入である場合に限って、1要素の配列は
かならず転換するようにして互換性を維持しようとしましたが、気
持ち悪さはぬぐえません。

とりあえず、とても最終仕様とは呼べませんが、ためしに実装した
ものをCVSにコミットしてみます。ひまのある方は試してみてくだ
さい。
                                まつもと ゆきひろ /:|)

In This Thread