[#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>,

[#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

金光です。

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

原です。

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

まつもと ゆきひろです

[#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:13608] Proc#call

From: Shin-ichiro HARA <sinara@...>
Date: 2001-06-17 02:52:51 UTC
List: ruby-dev #13608
原です。

では Proc#call の話です。ここでは

 >  (i)   x = 1, *[]
 >  (ii)  Proc#call
 >  (iii) Method#to_proc

これらを決めたい。Proc#call と多重代入との違いは、Proc#callには
次の様な要請があるという事ですね。

   (1) call(1, 2) と call([1, 2]) を区別したい。
   (2) call の引数の数のチェックをしたい。

#この2つ以外にあります?


で、私の案です。単純なんですが、次の様なものはどうでしょう。

まず、(i) ですが、これはまだ保留にします。そして call(B) の B に
おける *obj の展開は普通のメソッドへ引数と同様にします。例えば

   call(1, *[]) は call([1]) でなく call(1) と同じ

となります。(これは他に選択肢は無いでしょう。)

次に(ii)ですが、基本的には今まで通りとします。ただし、Proc.new,
lambda, proc は、一つの整数値を引数(arity)にとる事を可能とし
て、それをより理解しやすい仕様にします。

   proc([num]){}
     num が指定されていれば、それを arity とする Proc オブジェクトを生成
     する。この時、callの(*による展開後の)引数からブロックパラメータへ
     の代入は完全に多重代入の仕様に従う。つまり、新しい、純粋な多重代入
     を行うメソッド Proc#yield(cf.[ruby-dev:13597])を使えば

     class Proc
       def call(*y)
         if arity >= 0 && y.size != arity || y.size < -arity-1
           raise ArgumentError
         end
         self.yield *y
       end
     end

     と説明できる。

     num が省略された場合は従来通り。例えば、次の様に書き換えられる。

     proc{|x| ...}    <=> proc(-1){|x| ...}
     proc{|x,| ...}   <=> proc(1){|x| ...}   #Not proc(1){|x,| ...}
     proc{|x,y| ...}  <=> proc(2){|x,y| ...}
     proc{|x,y,| ...} <=> proc(2){|x,y| ...}
     proc{|*x| ...}   <=> proc(-1){|*x| ...}
     proc{|x,*y| ...} <=> proc(-2){|x,*y| ...}
     等々

とします。つまりnumがあるのが正式で、numを省略した場合のarityの指定を
ブロックパラメータの形で便宜上行わせていると考えるわけです。

最後の(iii)ですが、これは Method オブジェクトには既に arity がセット
されていると考えられますから、それを to_proc は引き継がせる事にしま
す。つまり、

    array.method(:store).to_proc

は、

    proc(2){|x, y| array.store(x, y)}

と同等と考えます。


以上です。相変わらず(i)は保留なんですが。

まあ、パラメータを増やすという、安易にやってはいけないウルトラCで
はあるけれど、非常にすっきりはします。田中さんの[ruby-dev:13598]で
の要請

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

も満たすと思います。

In This Thread