38

優れたRubyonRailsチュートリアルを読んでいて、次のコードに遭遇しました。

if 0
  true
else
  false
end

上記はtrue、多くの言語(Cが明白な例)とは異なり、rubyが0として扱う方法を示していtrueます。特異な振る舞いを却下するのではなく、この慣習からの重大な逸脱には正当な理由があると思います。たとえば、Pythonは、予想どおりにとして0扱います。False

要するに、ルビーを設計する理由は何0ですかtrue

4

3 に答える 3

63

Matzは、「真実性」自体の概念的な単純さを望んでいたと思います。「偽の」値はfalseとだけnilです。限目。

を使用falseするのが最もクリーンですが、を含める必要があることは理解できますnil。特殊なケースとして整数ゼロを含めると、他のタイプの真実性を疑問視する精神的な水門が開かれる可能性があります。文字列はどうですか、""間違っていますか?そして配列は、[]間違っていますか?そしてハッシュ、{}間違っていますか?Ad insanitum(JavaScriptを参照)..

于 2012-04-30T17:02:20.867 に答える
9

ルビーでは、存在する場合、それは本当です。そうでなければ、それは誤りです。

したがって、Rubyの場合null(アドレスが割り当てられていない)とfalseはfalseのみです。

アドレスが割り当てられているため、他のすべては真です。

私はこのように考えています。「それは存在しますか?」

于 2012-04-30T17:09:56.890 に答える
6

Common Lispでは、0もtrueとして扱われます。たとえば、次のコードはを返しますtrue

(if 0 'true 'false)

間違いなく、RubyはLispで行われたのと同じ設計上の決定に従っています。Lispでは、空のリスト(で表されるnil)だけがfalseです。

于 2013-04-19T03:39:50.393 に答える