ほとんどの事業者は、実際にはメソッドなので、 x + y
呼び出している+
方法x
引数とy
書き込まれる、 x.+(y)
与えられた演算子の意味的意味を持つ独自のメソッドを書く場合は、そのクラスにバリアントを実装できます。
愚かな例として:
# A class that lets you operate on numbers by name.
class NamedInteger
name_to_value = { 'one' => 1, 'two' => 2, ... }
# define the plus method
def + (left_addend, right_addend)
name_to_value(left_addend) + name_to_value(right_addend)
end
...
end
&&
対and
、 ||
を使用する場合対or
ブール値を表現するには、 &&
and
、および||
2つの方法があります。またはor
-彼らは常にではないが、多くの場合、交換可能です。これらを「文字」と「単語」の変種と呼んでいます。
文字バリアントの優先順位が高くなり、より複雑なステートメントでかっこの必要性が減り、予期しないエラーを回避できます。
単語バリエーションは、もともとブール演算子ではなくコントロールフロー演算子として意図されていました。つまり、連鎖メソッド文で使用するように設計されています。
raise 'an error' and return
ブール演算子として使用することはできますが、優先順位を低くすると予測できません。
第2に、多くのRubyistsは、x.nilなどのブール式( true
またはfalse
と評価される式)を作成するときに文字の変形を好みx.nil? || x.empty?
。一方、 一連のメソッドが評価されている場合には、バリアントが優先され、失敗する可能性があります。たとえば、失敗時にnil
を返すメソッドにvariantという単語を使用する一般的なイディオムは次のようになります。
def deliver_email
# If the first fails, try the backup, and if that works, all good
deliver_by_primary or deliver_by_backup and return
# error handling code
end