kiyokaのブログアーカイブ

Archive of old blog posts

Schemerにとって理想のRubyとは(1)

  • Schemerはこんなコードを書きたいと思うはず。defとlambdaは同じであるべきだ。
def func1( x )
  x + 1
end
p *1,2,3*.map( func1 )
  • なんでdefは内部でlambdaに置換されないんだろうか。えっ?class/moduleとの整合?私はそんなの知らない。 ところで、Ruby1.8.6ではクロージャをmapに渡すためにはこう書くしかない。
func1 = lambda {|x|
  x + 1
}
p *1,2,3*.map {|x|
  func1.call(x) 
}

– せめてこれくらい書ければいいなぁ。

func1 = lambda {|x|
  x + 1
}
p *1,2,3*.map( func1 )

– でもエラーとな…残念だ。

bash-3.2$ ruby ./t.rb
./t.rb:5:in `map': wrong number of arguments (1 for 0) (ArgumentError)
	from ./t.rb:5

私が知らないだけで本当はもっと簡潔に書く方法があるのかな?