From: Shinya Kawaji Date: 2003-03-13T11:20:25+09:00 Subject: [ruby-list:37283] 両方の式とも常に評価する論理和・論理積 かわじ、です きっとごく簡単な事だと思うのですが、二つの式を両方とも評価した論理和・論 理積を求める簡単な方法があるのかどうか、教えていただけましたら幸いです。 例えば String クラスに、新たに「前後の空白文字(\s)を削除する」という 破壊的メソッドを追加するとします。 class String def s_strip! gsub!(/\A\s+/,'') gsub!(/\s+\z/,'') end end このままでは、この String#s_strip! の戻り値は、最後の式の戻り値と 同じなので、strip! や gsub! などと同様に「変更されれば self, 変更されなければ nil」というようにしたいと思います。 class String def s_strip! gsub!(/\A\s+/,'') || gsub!(/\s+\z/,'') end end とするのはもちろん駄目で(最初の式しか評価されない場合がある)、 私の拙い知識では class String def s_strip! tmp1 = gsub!(/\A\s+/,'') tmp2 = gsub!(/\s+\z/,'') (tmp1 or tmp2) ? self : nil end end とローカル変数を使うか、 class String def s_strip! __get_result( gsub!(/\A\s+/,''), gsub!(/\s+\z/,'') ) end private def __get_result(*args) args.compact.empty? ? nil : self end end とのように、補助的な関数を定義する方法しか思いつきません。 きっと何か簡単な方法があるかと思うのですが、一般的に、二つの式を常に両方 とも評価して、その論理和や論理積を求める方法は他にありますでしょうか? -- Shinya Kawaji