2016-12-05 8 views
2

最近、私は__bool__ fuctionをPythonで悩まし、クラスをブールに変換し、条件を実行するときに呼び出されました。 Rubyでオブジェクトをブール値に変換する方法はありますか

if expression: 
    pass 

を行うと、実際にこのように、この内部

if bool(expression): 
    pass 

をやっている、別のTrue/Falseの式の値に応じて復帰させることができます。

同じことをするPythonの__bool__とRubyの同等の機能はありますか? (私は成功せず!!~===を見ました。)

答えて

3

号Rubyはほとんどの言語よりもこれらの事についてあまり厳しいです:のみfalsenilは、言語設計により、falsyです。これを無効にする方法はありません。

if items:をPythonで質問すると、if items.empty?と聞かれます。あなたがPython if determinant:に質問するところでは、Rubyのイディオムはunless determinant.zero?です。 PythonのZenは "Explicitは暗黙よりも優れている"としていますか?ハハ。 :D

+0

Fixnumクラスのメソッドをオーバーライドして 'if 0'がfalseを返すようにすることはできませんか? –

+0

それは正しいです。 '0'は' false'でも 'nil'でもないので真実です。これにより驚きや不慮のミスの量が減ります。 – Amadan

2

!!トリックを使用すると、ルビーの明示的なブール値に変えることができますが、アマダン氏は言いましたが、それは特に関係ありません。 !!が動作する方法は、オブジェクトがoの場合、!ofalseを返し、oがfalseの場合は!oがtrueを返します。第2の!を入れて、!!oにすると、オブジェクトのブール値に相当する否定の否定が返されます。

関連する問題