defined?
私はRubyが初めてで、オペレーターに出くわしました。メソッドが/を返した?
ことを暗示していると思いましたが、定義されている場合は識別子の説明を返します。true
false
defined?
true
識別子が定義されているか定義されていないという/コンポーネントがあることは知っていますが、戻り値は常に/falseでなければならないことを意味してfalse
いると思いました。ヘルプ??
true
defined?
私はRubyが初めてで、オペレーターに出くわしました。メソッドが/を返した?
ことを暗示していると思いましたが、定義されている場合は識別子の説明を返します。true
false
defined?
true
識別子が定義されているか定義されていないという/コンポーネントがあることは知っていますが、戻り値は常に/falseでなければならないことを意味してfalse
いると思いました。ヘルプ??
true
これは、「true-true」または「truthy-false」のいずれかである「true」値を返します。
Ruby では、truey-false であることが 2 つだけあります。
false
(シングルトン オブジェクト)nil
(シングルトン オブジェクト)それ以外はすべて真であると見なされます。多くの Ruby コードは、この事実を述語に利用しています。述語のチェックは、次のようにする必要があります。
if list.empty?
いいえ:
if list.empty? == true
defined? a #=> nil
a = 7 # => 7
defined? a #=> "local-variable"
実際の「true」または「false」の値は返されませんが、同じように機能します。
if defined? a
puts "This will still act as true"
end
#=> This will still act as true
この理由は、Ruby ではfalse
and を除いてすべてが true であるためnil
です。
このリンクdefined?
には、オペレーターに関するより多くの情報があります。
これは慣例であり、言語の一部ではないため、疑問符に関する実際の規則はありません。http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/より
「慣例により、質問に答えるメソッド (つまり、Array#empty? はレシーバーが空の場合に true を返す) は疑問符で終わります。」
"non-nil"/nil は Ruby の true/false と同じです。他の言語から来たら、true/false を使用してテストする習慣があるかもしれませんが、Ruby ではオブジェクトが nil かどうかをテストします。
したがって、これら2つは同じです:
a = 'hello'
if defined?(a) then puts a end
a = 'hello'
if defined?(a) != nil then puts a end
true/false を返したいと主張する場合は、2 番目のものを使用できます。これは true/false を返します:
a != nil
引数 (任意の式) が定義されていない場合、defined?
演算子は戻ります。定義されていない場合は、その引数の説明を返します。nil
は falseとnil
評価され、(false を除く) 他のすべての式は true と評価されるため、 の動作はdefined?
期待どおりです。