Ruby.each
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|} みたいに使えないもんなぁ。
関連エントリー
- prototype.js each 使えないから最新の RC を試したんだけど、思ったより使えない。Event.observe って、もうちょっとクロスブラウザに考慮...
- Ruby, ブロック引数をとるメソッド def foo(a, b) yield a + b end def fop(a, b, &block) yield a + b end de...
- ECMAScript でイテレータ イテレータってのは Ruby の [1, 2, 3].each {|item| puts item } ですけど、ふと思いついたので ECM...
- github releases に登録した assets のダウンロード数を一発でリスト表示するワンライナー UIには出ていないがAPI経由だと取得できる。認証なしで誰でもとれる (権限いらない)。 curl https://api.github.c...
- Ruby's eash on ECMAScript ECMAScript でイテレータ なんてのを書いたことがあったけど、これ、each の中で break ができないのでちょっと気持ち悪い。...
