2016-09-01 20 views
1

ブール値への自動変換を実現するために、Rubyオブジェクトにいくつかのメソッドを追加できますか?例えば。 if obj == trueRubyオブジェクトをブール型に暗黙的に変換する方法

+1

変換のルールは何ですか?どのオブジェクトを 'true'に変換し、' false'に変換すべきか? – Stefan

+0

通常、これには "ダブルバング"が使われます( '!! obj')。参照してください:http://stackoverflow.com/questions/3994033/ruby-operator-a-k-a-the-double-bang – Bartosz

答えて

1

==、あなたはそのtruthyness値に基づいてブール値にオブジェクトを変換したいならば、あなたは二重否定を使用することができ、言っ

:==メソッドの構文糖です。その後、

class SomeClass 
    def ==(val) 
    # specyfy the comparision behaviour 
    end 
end 

そして、それが好き使用します:

sc = SomeClass.new 
sc == true 
=> true # or false, depending on :== method's implementation 
あなたは比較ですの結果が trueとするとき falseあるべきときに、内部のオブジェクトの状態に基づいて、指定することができ、オブジェクト自身の :==方法を定義することができます
+0

'to_bool'メソッドを使うこともできます。 – azrael

0

ほとんどの場合、オブジェクトを明示的にブール値に変換するのではなく、真実性をチェックします。これは、ちょうどRubyで

if obj 
    # here, obj is truethy 
else 
    # here, object is falsey 
end 

、唯一falsenil falseyのように定義されているを書くあなたの何が起こるかです。他のすべてのオブジェクトはtruethyです。上記のような条件で使用できます。このため、trueまたはfalseの明示的なチェックは、Rubyではかなりまれです。すなわち

obj_truthyness = !!obj 
# => true or false 
+0

ありがとうございますが、私は暗黙的にnilではないオブジェクトを変換したいです。ブール値はオブジェクトの内部状態によって異なり、明示的な変換はできません(SASSのため)。 – azrael

+0

私はあなたが達成したいことを理解していません。元の質問を編集して、(1)実際に何を達成したいのか、(2)これを使用すべき場所、(3)必要がある理由を説明するために詳細を追加してください。 –

関連する問題