[#3587] Multiple assignment at yield() — Shin-ichro Hara <sinara@...>

原です。

86 messages 1998/11/17
[#3588] Re: Multiple assignment at yield() — matz@... (Yukihiro Matsumoto) 1998/11/17

まつもと ゆきひろです

[#3589] Re: Multiple assignment at yield() — Shin-ichro Hara <sinara@...> 1998/11/17

原です。

[#3590] Re: Multiple assignment at yield() — matz@... (Yukihiro Matsumoto) 1998/11/17

まつもと ゆきひろです

[#3594] Re: Multiple assignment at yield() — Shin-ichro Hara <sinara@...> 1998/11/18

原です。

[#3595] Re: Multiple assignment at yield() — matz@... (Yukihiro Matsumoto) 1998/11/18

まつもと ゆきひろです

[#3596] Re: Multiple assignment at yield() — Shin-ichro Hara <sinara@...> 1998/11/18

原です。

[#3598] Re: Multiple assignment at yield() — matz@... (Yukihiro Matsumoto) 1998/11/19

まつもと ゆきひろです

[#3600] Re: Multiple assignment at yield() — Shin-ichro Hara <sinara@...> 1998/11/20

原です。

[#3610] Re: Multiple assignment at yield() — Shin-ichro Hara <sinara@...> 1998/11/20

原です。

[#3611] Re: Multiple assignment at yield() — matz@... (Yukihiro Matsumoto) 1998/11/20

まつもと ゆきひろです

[#3622] Re: Multiple assignment at yield() — Shin-ichro Hara <sinara@...> 1998/11/21

原です。

[#3630] Re: Multiple assignment at yield() — shugo@... (MAEDA Shugo) 1998/11/22

前田です。

[#3635] Re: Multiple assignment at yield() — Shin-ichiro Hara <sinara@...> 1998/11/23

原です。

[#3658] Re: Multiple assignment at yield() — matz@... (Yukihiro Matsumoto) 1998/11/24

まつもと ゆきひろです

[#3660] Re: Multiple assignment at yield() — Shin-ichro Hara <sinara@...> 1998/11/24

原です。

[#3722] multiple assignment, yield and return — Shin-ichro Hara <sinara@...> 1998/12/01

原です。

[#3724] Re: multiple assignment, yield and return — Shin-ichro Hara <sinara@...> 1998/12/01

原です。

[#3742] List() — Shin-ichro Hara <sinara@...> 1998/12/04

原です。

[#3743] Re: List() — shugo@... (MAEDA Shugo) 1998/12/06

前田です。

[#3744] Re: List() — Shin-ichiro Hara <sinara@...> 1998/12/06

原です。

[#3755] Re: List() — shugo@... (MAEDA Shugo) 1998/12/07

前田です。

[#3758] Re: List() — Shin-ichro Hara <sinara@...> 1998/12/07

原です。

[#3760] Re: List() — shugo@... (MAEDA Shugo) 1998/12/07

前田です。

[#3761] Re: List() — Shin-ichiro Hara <sinara@...> 1998/12/07

原です。

[#3774] Re: List() — shugo@... (MAEDA Shugo) 1998/12/08

前田です。

[#3780] Re: List() — Shin-ichiro Hara <sinara@...> 1998/12/08

原です。

[#3784] Re: List() — shugo@... (MAEDA Shugo) 1998/12/09

前田です。

[#3788] Re: List() — Shin-ichro Hara <sinara@...> 1998/12/09

原です。

[#3789] Re: List() — MAEDA Shugo <shugo@...> 1998/12/10

前田です。

[#3602] problem of Delegator — keiju@... (Keiju ISHITSUKA)

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

17 messages 1998/11/20
[#3605] Re: problem of Delegator — matz@... (Yukihiro Matsumoto) 1998/11/20

まつもと ゆきひろです

[#3606] Re: problem of Delegator — keiju@... (石塚圭樹 ) 1998/11/20

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

[#3607] Re: problem of Delegator — matz@... (Yukihiro Matsumoto) 1998/11/20

まつもと ゆきひろです

[#3612] Re: problem of Delegator — keiju@... (石塚圭樹 ) 1998/11/20

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

[#3613] Re: problem of Delegator — matz@... (Yukihiro Matsumoto) 1998/11/20

まつもと ゆきひろです

[#3626] block local variable (Re: スコープの範囲) — shugo@... (MAEDA Shugo)

前田です。

47 messages 1998/11/22
[#3628] Re: block local variable (Re: スコープの範囲) — Koji Arai <JCA02266@...> 1998/11/22

新井です。

[#3629] Re: block local variable (Re: スコープの範囲) — shugo@... (MAEDA Shugo) 1998/11/22

前田です。

[#3632] Re: block local variable (Re: スコープの範囲) — Koji Arai <JCA02266@...> 1998/11/22

新井です。

[#3633] Re: block local variable (Re: スコープの範囲) — shugo@... (MAEDA Shugo) 1998/11/22

前田です。

[#3636] Re: block local variable (Re: スコープの範囲) — Shin-ichiro Hara <sinara@...> 1998/11/23

原です。

[#3642] Re: block local variable (Re: スコープの範囲) — Koji Arai <JCA02266@...> 1998/11/23

新井です。

[#3645] Re: block local variable(Re: スコープの範囲) — Shin-ichiro Hara <sinara@...> 1998/11/23

原です。

[#3674] Re: block local variable(Re: スコープの範囲) — Koji Arai <JCA02266@...> 1998/11/25

新井です。

[#3678] Re: block local variable(Re: スコープの範囲) — matz@... (Yukihiro Matsumoto) 1998/11/26

まつもと ゆきひろです

[#3681] Re: block local variable(Re: スコープの範囲) — Kazuhiro HIWADA <hiwada@...> 1998/11/26

ひわだです。

[#3682] Re: block local variable(Re: スコープの範囲) — Shin-ichro Hara <sinara@...> 1998/11/26

原です。

[#3683] Re: block local variable(Re: スコープの範囲) — matz@... (Yukihiro Matsumoto) 1998/11/26

まつもと ゆきひろです

[#3684] Re: block local variable(Re: スコープの範囲) — Shin-ichro Hara <sinara@...> 1998/11/26

原です。

[#3685] Re: block local variable(Re: スコープの範囲) — matz@... (Yukihiro Matsumoto) 1998/11/26

まつもと ゆきひろです

[#3709] ruby-1.1c9 install 中に SEGV — Koji Arai <JCA02266@...>

新井です。

18 messages 1998/11/30

[ruby-dev:3704] Re: Multiple assignment at yield()

From: shugo@... (MAEDA Shugo)
Date: 1998-11-30 09:11:57 UTC
List: ruby-dev #3704
前田です。

>>>>> In [ruby-dev:3668]
>>>>> "松本" == Yukihiro Matsumoto <matz@netlab.co.jp> san wrote:

松本> それと,[ruby-list:3625]の問題は本質的にはcallやyieldの引数
松本> が複数与えられた時には(強制的な)配列化を行う定義になっており,

松本>   yield a, b

松本> と

松本>   yield [a, b]

松本> の区別が付かないことにあります.というか前者は後者の略記法の
松本> つもりだった.これはProc#callにも適用されますから,(少なくと
松本> も現状では)callでも両者の区別はつきません.[ruby-list:3625]
松本> はその区別を求めているわけですから,多重代入をどうこうするだ
松本> けでは不十分で,yieldの実行モデルを再検討しないと解決できな
松本> いのです.

Lispで言えば、apply的であり、かつfuncall的でもあるわけですよね。
やはりどちらかに統一した方がよいのではないでしょうか。
apply的なyieldをyield_a、funcall的なyieldをyield_fとすると、

yield_a(list)

は、

yield_f(*list)

と書けるので、funcall的な動作にするべきではないかと思います。
# 現在のyieldがfuncall的な動作だと思っている人も多いのではない
# かという気がしますし。

つまり、

yield(1)       #=>  args == [1]
yield(1, 2)    #=>  args == [1, 2]
yield([1, 2])  #=>  args == [[1, 2]]

問題は、現在の仕様ではブロックへの引数の受け渡しに多重代入を
使っているため、このままでは、

[1, 2, 3].each do |i|
  p i
end

が、

[1]
[2]
[3]

になってしまうことです。

これを多重継承のロジックを変更することで解決するのは無理が
あると思います。

そこで思い切って、ブロックへの引数の受け渡しに多重継承を用いず、
別のロジックを用いることにしてはどうでしょう。
具体的には、

yield(1)      (args == [1]):
|x|   => x = 1
|x,|  => x = 1
|*x|  => x = [1]

yield(1, 2)   (args == [1, 2]):
|x|   => x = 1
|x,|  => x = 1
|x,y| => x = 1; y = 2
|*x|  => x = [1, 2]

yield([1, 2]) (args == [[1, 2]]):
|x|   => x = [1, 2]
|x,|  => x = [1, 2]
|x,y| => x = [1, 2]; y = nil
|*x|  => x = [[1, 2]]

つまり|x|を|x,|と同じ意味に、|*x|をこれまでの|x|の意味にするわけです。
これなら[ruby-dev:3625]は解決されますし、メソッドの引数の渡し方に
挙動を合わせただけなので、モデルも理解しやすいというか、直感に合って
いるような気がします。

# でも、やはり大袈裟すぎるかなあ。
# rb_yield()をどうするかというのも問題ですし。

-- 
前田 修吾 (mailto:shugo@aianet.ne.jp)

In This Thread