[前][次][番号順一覧][スレッド一覧][生データ]

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