優れたRubyonRailsチュートリアルを読んでいて、次のコードに遭遇しました。
if 0
true
else
false
end
上記はtrue
、多くの言語(Cが明白な例)とは異なり、rubyが0
として扱う方法を示していtrue
ます。特異な振る舞いを却下するのではなく、この慣習からの重大な逸脱には正当な理由があると思います。たとえば、Pythonは、予想どおりにとして0
扱います。False
要するに、ルビーを設計する理由は何0
ですかtrue
?
優れたRubyonRailsチュートリアルを読んでいて、次のコードに遭遇しました。
if 0
true
else
false
end
上記はtrue
、多くの言語(Cが明白な例)とは異なり、rubyが0
として扱う方法を示していtrue
ます。特異な振る舞いを却下するのではなく、この慣習からの重大な逸脱には正当な理由があると思います。たとえば、Pythonは、予想どおりにとして0
扱います。False
要するに、ルビーを設計する理由は何0
ですかtrue
?
Matzは、「真実性」自体の概念的な単純さを望んでいたと思います。「偽の」値はfalse
とだけnil
です。限目。
を使用false
するのが最もクリーンですが、を含める必要があることは理解できますnil
。特殊なケースとして整数ゼロを含めると、他のタイプの真実性を疑問視する精神的な水門が開かれる可能性があります。文字列はどうですか、""
間違っていますか?そして配列は、[]
間違っていますか?そしてハッシュ、{}
間違っていますか?Ad insanitum(JavaScriptを参照)..
ルビーでは、存在する場合、それは本当です。そうでなければ、それは誤りです。
したがって、Rubyの場合null(アドレスが割り当てられていない)とfalseはfalseのみです。
アドレスが割り当てられているため、他のすべては真です。
私はこのように考えています。「それは存在しますか?」
Common Lispでは、0もtrueとして扱われます。たとえば、次のコードはを返しますtrue
。
(if 0 'true 'false)
間違いなく、RubyはLispで行われたのと同じ設計上の決定に従っています。Lispでは、空のリスト(で表されるnil
)だけがfalseです。