From: Shugo Maeda Date: 2001-06-08T16:01:14+09:00 Subject: [ruby-dev:13501] Re: yield *[[]] 前田です。 At Fri, 8 Jun 2001 15:21:52 +0900, K.Kosako wrote: > > 例: (1)が*[[1,2,3]]、(2)が*aの場合 > > > > $ ruby17 -e '*a = *[[1,2,3]]; p a' > > [[1, 2, 3]] > > $ ruby17 -e 'x = *[[1,2,3]]; *a = x; p a' > > [1, 2, 3] > > > > というわけで、上記のような趣旨だとすると、仕様に問題があるのでは > > ないでしょうか。 > > 以下に引用した田中さんの解釈を、n = 1, *rが存在しない場合まで > 含めて適用できると考えると、 > > x = *[[1,2,3]]; *a = x; > > の中の*a = xは、*a = [x]とみなすべき(現状はそうなっていない)なので、 > 上記のことで仕様に問題があるとは断定できないのでは。 よくわからなかったのですが、「現状はそうなっていない」のは仕様の 問題ではなくてバグだということですか? そういう仕様だということにすると、 x = [1, 2] a, b = x p a #=> [1, 2] p b #=> nil とならければいけないことになりますが…。 多重代入では、「右辺の式が一つしか与えられなかった場合、式を評価 した値は配列に変換される」という仕様ですが、式を評価した値が配列 であった場合はその配列がそのまま使われるというのが仕様だと思いま す。(明文化されてはいないかもしれませんが。) これを変えるとなるとちょっと互換性の問題が大きすぎませんか。 -- 前田 修吾