Ruby の each
系メソッドで一つ気に入らないというか、仕方ないんだけど面倒くさいことがある。なにかっていうと index
を使いたければ自分で変数作ってインクリメントしないといけないこと。each
だけに関しては each_with_index
があるけど、他の Enumerable
なメソッドにはない。そんなに必要なわけじゃないし、だいたいは他のもっといい書き方が存在するんだけど、prototype.js の each
系を見てから、ちょっと不便だなぁって思うようになった。
prototype.js の each
系は全て index
と item
が両方渡される。でも、受け取る側の関数は仮引数を常に2個書かなくてもいい。ECMAScript は引数の数に無頓着だ。いくら渡しても怒られない。仮引数を書かなくても arguments で参照できる。
対して Ruby の yield
はエラーこそ出さない (call
は出す) ものの、こういうことすると警告してくれちゃう。別にそれが悪いわけじゃなくて、むしろいいんだけど、っていうか block.arity
で場合わけすればいいんだけど。
なにがいいたいかわからんことに。
arity
の数で場合わけしたらだめか。[[:a, :b]].each {|a, b|}
みたいに使えないもんなぁ。