From: shugo@... (MAEDA Shugo) Date: 1998-12-03T01:20:29+09:00 Subject: [ruby-dev:3732] Re: multiple assignment, yield and return 前田です。 >>>>> In [ruby-dev:3728] >>>>> "原" == Shin-ichro Hara san wrote: 原> |現状のモデルではyield(1, 2)はyield([1, 2])の略記法とのことなので、 原> |モデル変更しないのなら区別するのも不自然な気がします。 原> ええ、もうモデルを完全に変更するという前提で話をしています。(^^; でもまつもとさんはあまり乗り気じゃなさそうですね(^^; 原> |やはり互換性を維持した上で、シンプルなモデルにするのは無理みたいですね:-( 原> ううむ。私は今だに *x = a で x = [a] の意味になるところのみ非互 原> 換で GO で OK だと考えてるのですが。 原> つまり yield への値の渡し方をフラグ式でも原式Listでも前田式配列 原> でもどれでもいいから yield([1,2]) と yield(1,2) が区別できるよう 原> に変更して、ブロックパラメータへの代入は従来の多重代入の方法を用 原> いる。ここで *x = a のみ x = [a] とする非互換を設ける、という考 原> えなんだけど。 yieldの仕様を僕の提案のようにした場合、多重代入のモデルだと、 yield(1) として、|x| で受けとった時、x = [1] になって非互換になるので、 |*x| の時の挙動の変更だけでは不十分な気がするのですが。 原さんの案だと、 *x = [1, 2] #=> x = [[1, 2]] *x = List.new(1, 2) #=> x = [1, 2] のように両者を区別できるようにするということだと思いますが、 x, y = [1, 2] #=> x = 1; y = 1 なのに *x = [1, 2] #=> x = [[1, 2]] というのは、やはり不自然な気もします。 # *xの場合だけを見れば、自然に見えるんですが。 x, y = [1, 2] #=> x = [1, 2]; y = nil とするなら、(不便にはなりますが)一貫性があると思うのですが、 やはり互換性の問題が:-( -- 前田 修吾 (mailto:shugo@aianet.ne.jp)