[#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
原です。
[#3663] Re: Multiple assignment at yield()
— matz@... (Yukihiro Matsumoto)
1998/11/25
まつもと ゆきひろです
[#3667] Re: Multiple assignment at yield()
— Shin-ichro Hara <sinara@...>
1998/11/25
原です。
[#3722] multiple assignment, yield and return
— Shin-ichro Hara <sinara@...>
1998/12/01
原です。
[#3725] Re: multiple assignment, yield and return
— shugo@... (MAEDA Shugo)
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
前田です。
[#3790] Re: List()
— Shin-ichiro Hara <sinara@...>
1998/12/10
原です。
[#3791] Re: List()
— MAEDA Shugo <shugo@...>
1998/12/10
前田です。
[#3793] Re: List()
— Shin-ichiro Hara <sinara@...>
1998/12/12
原です。
[#3797] Re: List()
— matz@... (Yukihiro Matsumoto)
1998/12/14
まつもと ゆきひろです
[#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
まつもと ゆきひろです
[#3618] Re: problem of Delegator
— keiju@... (石塚圭樹 )
1998/11/20
けいじゅ@日本ラショナルソフトウェアです.
[#3619] Re: problem of Delegator
— matz@... (Yukihiro Matsumoto)
1998/11/20
まつもと ゆきひろです
[#3620] Re: problem of Delegator
— keiju@... (石塚圭樹 )
1998/11/20
けいじゅ@日本ラショナルソフトウェアです.
[#3647] Re: problem of Delegator
— matz@... (Yukihiro Matsumoto)
1998/11/24
まつもと ゆきひろです
[#3652] Re: problem of Delegator
— keiju@... (石塚圭樹 )
1998/11/24
けいじゅ@日本ラショナルソフトウェアです.
[#3653] Re: problem of Delegator
— matz@... (Yukihiro Matsumoto)
1998/11/24
まつもと ゆきひろです
[#3655] Re: problem of Delegator
— keiju@... (石塚圭樹 )
1998/11/24
けいじゅ@日本ラショナルソフトウェアです.
[#3621] Time object memory leak? — Masaki Fukushima <fukusima@...>
福嶋と申します。
6 messages
1998/11/21
[#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
まつもと ゆきひろです
[#3686] nested method? (Re: block local variable)
— shugo@... (MAEDA Shugo)
1998/11/26
前田です。
[#3687] Re: nested method? (Re: block local variable)
— Kazuhiro HIWADA <hiwada@...>
1998/11/26
ひわだです。
[#3689] Re: nested method? (Re: block local variable)
— shugo@... (MAEDA Shugo)
1998/11/27
前田@大阪大学です。
[#3690] Re: nested method? (Re: block local variable)
— Kazuhiro HIWADA <hiwada@...>
1998/11/27
ひわだです。
[#3692] Re: [ruby-list:11096] Re: MacRuby — Wakou Aoyama <wakou@...>
青山です。
10 messages
1998/11/27
[#3698] Re: [ruby-list:11096] Re: MacRuby
— shugo@... (MAEDA Shugo)
1998/11/29
前田です。
[#3699] Re: [ruby-list:11096] Re: MacRuby
— Wakou Aoyama <wakou@...>
1998/11/29
青山です。
[#3703] Re: [ruby-list:11096] Re: MacRuby
— Shin-ichro Hara <sinara@...>
1998/11/30
原です。
[#3707] new delegator — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
6 messages
1998/11/30
[#3709] ruby-1.1c9 install 中に SEGV — Koji Arai <JCA02266@...>
新井です。
18 messages
1998/11/30
[#3876] Re: ruby-1.1c9 install 中に SEGV
— Koji Arai <JCA02266@...>
1998/12/20
新井です。
[#3883] Re: ruby-1.1c9 install 中に SEGV
— matz@... (Yukihiro Matsumoto)
1998/12/22
まつもと ゆきひろです
[#3965] Re: ruby-1.1c9 install 中に SEGV
— Koji Arai <JCA02266@...>
1998/12/24
新井です。
[ruby-dev:3600] Re: Multiple assignment at yield()
From:
Shin-ichro Hara <sinara@...>
Date:
1998-11-20 03:47:15 UTC
List:
ruby-dev #3600
原です。
In message "[ruby-dev:3598] Re: Multiple assignment at yield()"
on 98/11/19, Yukihiro Matsumoto <matz@netlab.co.jp> writes:
|
|まつもと ゆきひろです
|
|親知らず抜いて来ました.痛かったです.(;_;)
不幸ですねえ。今時は無痛でできるのかと思ってけど、、、ヤブだった
のかも。:-)
ところで、
| def each7; @body.each { |x| yield(*x) } end
| Foo.new([7]).each7 { |x| p x } #=> [7]
これは #=> 7 の typo ですよね。
そうだとするとこれら 18 個の結果は現在の 1.1c のものと全く
一致しています。後退してしまった?
私の、一番最初の提案は
| def each7; @body.each { |x| yield(*x) } end
| Foo.new([[7]]).each7 { |x| p x } #=> [7]
これを #=> 7 にしたらどうか、というものでした。
そして次の提案は
| def each6; @body.each { |*x| yield(x) } end
| Foo.new([[6]]).each6 { |x| p x } #=> [6]
これを #=> [[6]] にしたらどうかということです。つまり、
1) yield(*x) は無条件に x の一番外側の [] を剥ぎとって
代入の右辺に置く
2) *x = は無条件に右辺に [] を付けて受ける
3) それ以外はいままで通り
というものです。したがって、、、
|| (1L) 右辺が配列ならリスト化,そうでなければそのまま
||
|| (2L) 先頭に * が付いた変数には代入しなかった残りが配列とし
|| て代入される
|
|とすると(1L)により,右辺がリストでなく,結果が配列でない時に
|は,そのまま左辺に代入されるんですね.その場合,以下の代入は
|どうふるまうべきですか?
|
| a, b = 5
| a, *b = 5
| *a = 5
|
|つまり,配列でないものを多重代入する時の振る舞いという意味で
|すが.
最後の以外はいままで通りであればいいと思います。足らない
スカラー b は b = nil、足らないベクトル *b は b = [] が充
填される、と。最後のは a = [5] です。今まで通り。
#なんか話が戻ってしまったなあ。
|私自身の解釈としては(既に述べましたが),
|
| * 多重代入の右辺は配列化される
|
| * 先頭に * が付いた変数には代入しなかった残りが配列として
| 代入される
|
|と思っています.つまり,*a = x と a = x の違いは右辺が配列化
|されるかどうかにあると思っているわけです.
ううむ、分かっているつもりなんですがね。記号で書いてみますね。
配列化を A() で表すと、
A(1) = [1]
A(1, 2) = [1, 2]
A([1]) = [1]
A([1, 2]) = [1, 2]
A(1, *[2]) = [1, 2]
A(1, *[2, 3]) = [1, 2, 3]
A(1, *2) = [1, 2]
A(*[1]) = [1]
A(*[1, 2]) = [1, 2]
となります。次に B() を強制的な配列化とします。A との違いは
B([1]) = [[1]]
B([1, 2]) = [[1, 2]]
だけです。さて、右辺に Array しか許さない(多重)代入を <= と
書きますね。
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]]
これはつまり、
a, b, *c <= [1, 2, [3]] #=> a = 1, b = 2, c = B([3])
a, *b <= [1, 2, [3]] #=> a = 1, b = B(2, [3])
*a <= [1, 2, [3]] #=> a = B(1, 2, [3])
と B を使っていることになります。
そして現状の多重代入を <== と書くと、
多重代入「<== ...」とは「<= A(...)」のことである。
といえるわけですね。合ってますか?
話を yield の方に移して、現在の yield(Y) のパラメータの渡し方は
こうですよね。
|x| #=> x = nil [ Y が0要素のとき ]
= Y [ x = Y が単純代入の形をしているとき ]
= A(Y) [ それ以外 ]
多重代入の左辺の形である X についての |X| は、単に X <== Y を実
行します。
|*x| #=> *x <== X
|x, y | #=> x, y <== X
|x, *y| #=> x, *y <== X
....
ここまではいいでしょうか?合ってますか?
|ただ,原さんの定義による挙動の方がよりよいことが示されれば,
|変更するのは可能だと思います.鍵は *a という左辺を持つ多重代
|入の解釈かな?
私の提案のスキームについては、昼食を食べてから書きます。(^^;