From: Tanaka Akira Date: 2003-01-03T12:03:53+09:00 Subject: [ruby-dev:19297] Re: ruby-1.8.0 / yield(nil)とyield()のちがい In article <1041554769.892566.13140.nullmailer@picachu.netlab.jp>, matz@ruby-lang.org (Yukihiro Matsumoto) writes: > ここについては先に説明すべきでした。手間をかけさせてしまって > もうし分けありません。少々不自然で悩ましい仕様ですが、妥協点 > としてはこんなものかなあ。 まぁ、ひとつのやりかたですね。 > ただ、return, break, nextではsvalue(*[]とnilの区別がつかない) > で情報を伝達しているわけですから、ここについてもさらなる考察 > が必要そうです。 *a = loop { break *[] } で a が [nil] になる、と。 > call, yieldの引数および*a以外のmrhsは元々avalueですから変換 > は必要ないと思います。 配列だからといって avalue として適切な値とは限らないと思いますが。 x, *y = [], *[] とすると avalue = [[], *[]] = [[]] となって、件の少々不自然で悩ましい 仕様により svalue な [] に変換されてから分解されるので、x = nil, y = [] となると思うのですが、右辺と左辺の構造が同じなのにもかかわらず、 構造の各部分それぞれを個別に代入するのと異なる結果にならないというのは 直観に合いません。 よーするに、左辺に変換をいれるなら右辺にはその逆変換をいれないと不自然 ということです。 call, yield については構文的な形が違うのである程度不自然なことが起こっ ても問題ないんですが。 -- [田中 哲][たなか あきら][Tanaka Akira]