背景
[true,true].reduce(:||)などとすると、「NoMethodError: undefined method `||' for true:TrueClass」 と怒られる。
[true,true].reduce(:|)とすると(縦棒一本)、「true」が返ってきて、はて?と思ってしまう。
結論
エラーにも有るように、||はメソッドではないから。メソッドでないなら何かというと、制御構造なのだ。説明
メソッドか制御構造か
演算子式のページに- 「再定義できる演算子(メソッド)」の欄に、||はない。一方、|はある。
- また、「再定義できない演算子(制御構造)」の欄に、||がある。
reduce
inject(reduce)の説明ページに「ブロックの代わりに使われるメソッド名を表す Symbol オブジェクトを指定します。」とある。
だから制御構造の||は使えない。
どうしたらいいのか
all? がありました。[true,true].all? => true(ビッド演算子と思った|はおいておいて)とりあえず終了~。