From: matz@... (Yukihiro Matsumoto) Date: 2003-01-04T03:20:42+09:00 Subject: [ruby-dev:19298] Re: ruby-1.8.0 / yield(nil)とyield()のちがい まつもと ゆきひろです In message "[ruby-dev:19297] Re: ruby-1.8.0 / yield(nil)とyield()のちがい" on 03/01/03, Tanaka Akira writes: |> ただ、return, break, nextではsvalue(*[]とnilの区別がつかない) |> で情報を伝達しているわけですから、ここについてもさらなる考察 |> が必要そうです。 | |*a = loop { break *[] } | |で a が [nil] になる、と。 そういうことです。これを「一貫性がない、許せん」とみなすか、 どうかと。 |> call, yieldの引数および*a以外のmrhsは元々avalueですから変換 |> は必要ないと思います。 | |配列だからといって avalue として適切な値とは限らないと思いますが。 | | x, *y = [], *[] | |とすると avalue = [[], *[]] = [[]] となって、件の少々不自然で悩ましい |仕様により svalue な [] に変換されてから分解されるので、x = nil, |y = [] となると思うのですが、右辺と左辺の構造が同じなのにもかかわらず、 |構造の各部分それぞれを個別に代入するのと異なる結果にならないというのは |直観に合いません。 | |よーするに、左辺に変換をいれるなら右辺にはその逆変換をいれないと不自然 |ということです。 ふむ。不自然なら不自然なりに自然を追求すべきと。もっともです。 ということで、今試したら x, *y = [], *[] p [x, y] は[[],[]]になりました。あれ? *x = [],*[] p x は[[[]]]になります。 どういうこと、と思ったら、無意識に逆変換を導入していたみたい です。ただ、無意識にやったことなので本当に整合性が取れている か分かりません。もうちょっと調べてみないと。 # 小人さんの仕事を信頼してはいけない。 まつもと ゆきひろ /:|)