[#3747] constants (or class vriable?) — Wakou Aoyama <wakou@...>

青山です。

20 messages 1998/12/06
[#3751] Re: constants (or class vriable?) — Shin-ichro Hara <sinara@...> 1998/12/07

原です。

[#3763] Re: constants (or class vriable?) — Wakou Aoyama <wakou@...> 1998/12/07

青山です。

[#3764] Re: constants (or class vriable?) — matz@... (Yukihiro Matsumoto) 1998/12/08

まつもと ゆきひろです

[#3767] Re: constants (or class vriable?) — kjana@... (YANAGAWA Kazuhisa) 1998/12/08

In message <199812080034.JAA05946@picachu.netlab.co.jp>

[#3826] ruby 1.1d0 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

35 messages 1998/12/16

[#3873] (?: ) does not work? — shugo@... (MAEDA Shugo)

前田です。

15 messages 1998/12/19

[#3881] I want to catch all jump — shugo@... (Shugo Maeda)

前田です。

17 messages 1998/12/21
[#3895] Re: I want to catch all jump — matz@... (Yukihiro Matsumoto) 1998/12/22

まつもと ゆきひろです

[#3894] ruby 1.1d1 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

25 messages 1998/12/22

[#3899] interpreter reinitialization — shugo@... (Shugo Maeda)

前田です。

22 messages 1998/12/22
[#3923] Re: interpreter reinitialization — matz@... (Yukihiro Matsumoto) 1998/12/23

まつもと ゆきひろです

[#3926] Re: interpreter reinitialization — shugo@... (Shugo Maeda) 1998/12/23

前田です。

[#3931] Re: interpreter reinitialization — matz@... (Yukihiro Matsumoto) 1998/12/24

まつもと ゆきひろです

[#3956] Re: interpreter reinitialization — shugo@... (Shugo Maeda) 1998/12/24

前田です。

[#3960] Re: interpreter reinitialization — matz@... (Yukihiro Matsumoto) 1998/12/24

まつもと ゆきひろです

[#4002] config.guess — Koji Arai <JCA02266@...>

新井です。

24 messages 1998/12/26
[#4039] Re: config.guess — matz@... (Yukihiro Matsumoto) 1998/12/29

まつもと ゆきひろです

[#4045] Re: config.guess — Koji Arai <JCA02266@...> 1998/12/31

新井です。

[#4047] Re: config.guess — matz@... (Yukihiro Matsumoto) 1999/01/01

まつもと ゆきひろです

[#4048] Re: config.guess — Koji Arai <JCA02266@...> 1999/01/01

新井です。

[#4049] Re: config.guess — matz@... (Yukihiro Matsumoto) 1999/01/02

まつもと ゆきひろです

[#4050] Re: config.guess — Motoyuki Kasahara <m-kasahr@...> 1999/01/04

笠原です。

[#4030] module Precision — gotoken@... (GOTO Kentaro)

ごとけんです

78 messages 1998/12/28
[#4310] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/21

ごとけんです

[#4311] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/01/21

まつもと ゆきひろです

[#4312] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/21

ごとけんです

[#4317] Re: module Precision — keiju@... (石塚圭樹 ) 1999/01/21

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

[#4364] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/25

ごとけんです

[#4478] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/01/28

まつもと ゆきひろです

[#4506] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/30

ごとけんです

[#4552] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/02/01

まつもと ゆきひろです

[#4557] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/01

ごとけんです

[#4632] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/03

ごとけんです

[#4647] Re: module Precision — keiju@... (石塚圭樹 ) 1999/02/03

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

[#4648] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/03

ごとけんです

[#4633] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/02/03

まつもと ゆきひろです

[#4636] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/03

ごとけんです

[#4836] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/08

ごとけんです

[#4843] Re: module Precision — keiju@... (石塚圭樹 ) 1999/02/08

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

[#4849] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/08

ごとけんです

[#4924] Re: module Precision — keiju@... (石塚圭樹 ) 1999/02/09

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

[#4976] a genericity — gotoken@... (GOTO Kentaro) 1999/02/10

ごとけんです

[#5008] Re: a genericity — keiju@... (石塚圭樹 ) 1999/02/11

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

[#5018] Re: a genericity — gotoken@... (GOTO Kentaro) 1999/02/11

ごとけんです

[#5171] Re: a genericity — keiju@... (石塚圭樹 ) 1999/02/16

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

[ruby-dev:3739] Re: multiple assignment, yield and return

From: Shin-ichro Hara <sinara@...>
Date: 1998-12-03 17:16:46 UTC
List: ruby-dev #3739
原です。

In message "[ruby-dev:3732] Re: multiple assignment, yield and return"
    on 98/12/03, MAEDA Shugo <shugo@aianet.ne.jp> writes:
|
|前田です。

|原> ええ、もうモデルを完全に変更するという前提で話をしています。(^^;
|
|でもまつもとさんはあまり乗り気じゃなさそうですね(^^;

そうみたいだなー。(^^;;

|原> つまり yield への値の渡し方をフラグ式でも原式Listでも前田式配列
|原> でもどれでもいいから yield([1,2]) と yield(1,2) が区別できるよう
|原> に変更して、ブロックパラメータへの代入は従来の多重代入の方法を用
|原> いる。ここで *x = a のみ x = [a] とする非互換を設ける、という考
|原> えなんだけど。
|
|yieldの仕様を僕の提案のようにした場合、多重代入のモデルだと、
|
|yield(1)
|
|として、|x| で受けとった時、x = [1] になって非互換になるので、
||*x| の時の挙動の変更だけでは不十分な気がするのですが。

すいません、私は私の案の主張ばかりしています。

前田さんの方法では yield(1) で args = [1] となります。そこで
この arg へ値の渡し方を私の案に採り入れる事もできて、その場合
|x| の x への代入の仕方は、args.size == 1 か否かで処理をスイッ
チする事になります。args.size == 1 という「フラグ」が立ってい
ると [1] を 1 に直してしまう。


くどいけど、もう一度整理してみますね。

話が混乱しないように yield(Y) の引数 Y からブロックパラメータ
|X| への代入を2段階に分けます。つまり args で yield(Y) が途中
内部的に生成するものを表す事にします。すると、

  yield(Y)  ->  args (= Yで決まる何か)  ->  X = args

がブロックパラメータへの代入のプロセスです。(ここで X, Y は
一般のリストだとします。)

(A)[ruby-dev:3704] での前田さんの提案は

  args = [Y]       (Y が何でも)

であり、 X = args の方は

   (a1) X が何であろうとそれぞれに args の各要素を当てはめる
        リストの最後に *x があれば、arg の代入されなかった残
        りを配列にして x とする

です。(すっきりしている。)


(B)ところで現行は

  args = Y         .. Y が単項(1項のリスト)の時
         Array(Y)  .. Y が復項(2項以上リスト)の時

です。次に X = args の方は、(現行の)多重代入です。これを詳しく
書くと

   (b1) X が単項 x のとき x = arg
   (b2) X がそれ以外とき arg が Array ならそのまま、そうで
    ないなら arg.to_a の各要素を当てはめる
    左辺の最後の *x には代入されなかった残りを配列にして
        x にする

となっています。


(C)私の案は、まず args ですが、List() を List 生成(= List.new
また、to_l を List 化とすると、

  args = Y               .. Y が単項(1項のリスト)の時
         List(Y)         .. Y が複項(2項以上リスト)の時

です。X = args の方は

   (c1) X が単項 x のとき x = arg      (arg が List でないとき)
                              arg.to_a (arg が List のとき)

   (c2) X が単項 *x または arg が List なら、arg はそのまま、
    そうでないなら arg.to_l として各要素をあてはめる
        左辺の最後の *x には代入されなかった残りを配列にして
        x にする

となります。

#ここで [ruby-dev:3724] では Array#to_l を書き忘れていたけ
#ど [1, 2, 3].to_l == List(1,2,3) です。

#やはり List はクラスとしてユーザーから見えてはいけない
#かな。

#何度も同じ事を書いてしまっている様な気がする。(^^;


|原さんの案だと、

|*x = [1, 2]          #=> x = [[1, 2]]
|*x = List.new(1, 2)  #=> x = [1, 2]
|
|のように両者を区別できるようにするということだと思いますが、

そうです。

|x, y = [1, 2]  #=> x = 1; y = 2
|
|なのに
|
|*x = [1, 2]    #=> x = [[1, 2]]
|
|というのは、やはり不自然な気もします。
|# *xの場合だけを見れば、自然に見えるんですが。

前者は多重代入扱い、後者は半ば単純代入扱いしてい
ると考えればそう不自然でもないと思うのだけど。

逆に現状だと

x, *y = 0, [1, 2]  #=> x = 0; y = [[1, 2]]

なのに

*y = [1, 2]    #=> y = [1, 2]

という不自然さがあるわけです。

In This Thread