yarv-dev:893
From: SASADA Koichi <ko1 atdot.net>
Date: Wed, 15 Feb 2006 18:00:32 +0900
Subject: [yarv-dev:893] Re: open> lambda{|*x| p *x}.call prints nil
ささだです。 Yukihiro Matsumoto wrote: > サブジェクトの通りです。1.9では[]になります。 > 原因は iter{|*x|}、iter{|x,|}、iter{|&x|} にコンパイラが対応していない からです。 対応は、以前言っていたように parse.y で渡すデータをもっと整形してから (NODE_ARGS で渡す、など)と思っていたのですが、やっぱり私には難しそうな のでどうしようかなぁ、という感じです。 ブロックパラメータが mlhs である限り、パーサかコンパイラ、どちらかで mlhs の構文木をばらして NODE_ARGS + 初期化式(下記参照)にする必要がある んですよねぇ。なら、やっぱりコンパイラで頑張るかなぁ。 ブロックパラメータがメソッドの引数に準じる、という変更があると、それは それでとても幸せになれそうな気がしますが、やっぱり凄い変更の量になりそ う。そもそも、ギャっというひとはとても多そうです。 iter{|x|} => ARGS: x x=1 iter{|x|} => ARGS: #x initialize: x = #x iter{|@x|} => ARGS: #x initialize: @x = #x iter{|$x|} => ARGS: #x initialize: $x = #x ----(今はここまで) iter{|x, *y|} => ARGS: x, y, rest = 1 iter{|x, &y|} => ARGS: x, y, block => 1 のような感じ。 -- // SASADA Koichi at atdot dot net -- ML: yarv-dev quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
892 2006-02-15 14:26 [matz ruby-lang.org ] open> lambda{|*x| p *x}.call prints nil -> 893 2006-02-15 18:00 ┗[ko1 atdot.net ] 906 2006-02-16 19:54 ┗[ko1 atdot.net ] fixed> Re: open> lambda{|*x| p *x}.call prints nil