[#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:3610] Re: Multiple assignment at yield()

From: Shin-ichro Hara <sinara@...>
Date: 1998-11-20 07:18:57 UTC
List: ruby-dev #3610
原です。

多重代入の新しい考え方なんですけどね。(と、もったいぶるほどの
こともないのだが。)

古いのは [ruby-dev:3600]で書いたようなことです。古い多重代入を
X <== Y と書くことにすると

  X <== Y は X <= A(Y) と分解できる

ということでした。ここで A は配列化、<= は右辺に必ず配列を要
求する「多重代入」です。

そして新しい多重代入を仮に X <-= Y と書くとですね。標語的には
「右辺をまず配列化するのではなく、まずリスト化する」わけです。
リストは結局配列と同じようなものだから、右辺のリスト a, b, c
を [a, b, c] と書くことにします。(配列で書かない方が見やすい
のだがちょっとした都合で。)

まず <= を少し変形した <- を定義します。(<- も右辺は配列しか受
けとりません。)

  a, b, *c <- [1, 2, [3]]  #=>  a = 1, b = 2, c = [[3]]
  a, *b    <- [1, 2, [3]]  #=>  a = 1, b = [2, [3]]
  *a       <- [1, 2, [3]]  #=>  a = [1, 2, [3]]

ここまでは <= と全く同じ、* は残りを配列化して受けとっています。

違うのは次の「左辺がリストで、右辺が2重括弧なら2重括弧を1重に
解釈しなおす」という「2重括弧則」です。

  a, b, *c <- [[1, 2]]  #=>  a = 1,      b = 2,   c = []
  a, *b    <- [[1, 2]]  #=>  a = 1,      b = [2]
  *a       <- [[1, 2]]  #=>  a = [[1, 2]]

この、最後が a = [1, 2] ではなく a = [[1, 2]] となるのは、「左
辺にカンマがなければ「2重括弧則」適用されない」というのがいいわ
けです。

そして、新しい多重代入 X <-= Y の定義は、

  X <-= Y は X <- B(Y) とする。

です。B は強制的な配列化でした。定義おわり。


ところで <== と <-= はとても似ていて:

  <== :   A(配列) を特別扱い       <=2重括弧 に特別扱いなし
  <-= :   B(配列) に特別扱いなし   <-2重括弧 を特別扱い

と対称的です。一方、<== と <-= の違いはこういう場合です。

  *a <== [1]  #=>  *a <= A([1])  #=>  *a <= [1]    #=> a = [1]
  *a <-= [1]  #=>  *a <- B([1])  #=>  *a <- [[1]]  #=> a = [[1]]

多分 <== と <-= がくい違うのはこの *a <-= Y のケースだけだと思いま
す。ちょっとオーバーな定義の仕方だったかな。


次に yield ですが、現在の yield(Y) のパラメータの渡し方をもう一度:

  |x|      #=>  x = nil   [ Y が0要素のとき ]
                  = Y     [ x = Y が単純代入に見えるとき ]
                  = A(Y)  [ それ以外 ]

でした。これをこう定義し直したらどうでしょうか。まず *t <-= Y を計
算し、

  |x|      #=>  x = nil   [ t が [] のとき ]
                  = a     [ t が [a] のとき ]
                  = t     [ それ以外 ]

とする。結局、、前者と後者の違いは、yield(*[1]) が [1] になるか 1 にな
るかだけだと思いますが。

In This Thread