中野智文

中野智文(VOYAGE GROUP)のコンピュータなどのメモ

rubyのreduce(inject)の引数になぜ演算子||が使えないか

2014-08-06 19:34:22 | ruby

背景

 [true,true].reduce(:||)
などとすると、「NoMethodError: undefined method `||' for true:TrueClass」 と怒られる。
 [true,true].reduce(:|)
とすると(縦棒一本)、「true」が返ってきて、はて?と思ってしまう。

結論

エラーにも有るように、||はメソッドではないから。メソッドでないなら何かというと、制御構造なのだ。

説明

メソッドか制御構造か

演算子式のページに
  • 「再定義できる演算子(メソッド)」の欄に、||はない。一方、|はある。
  • また、「再定義できない演算子(制御構造)」の欄に、||がある。

reduce

inject(reduce)の説明ページ
「ブロックの代わりに使われるメソッド名を表す Symbol オブジェクトを指定します。」とある。
だから制御構造の||は使えない。

どうしたらいいのか

all? がありました。
 [true,true].all?
 => true
(ビッド演算子と思った|はおいておいて)とりあえず終了~。

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。