1

defined?私はRubyが初めてで、オペレーターに出くわしました。メソッドが/を返した?ことを暗示していると思いましたが、定義されている場合は識別子の説明を返します。truefalsedefined?

true識別子が定義されているか定義されていないという/コンポーネントがあることは知っていますが、戻り値は常に/falseでなければならないことを意味してfalseいると思いました。ヘルプ??true

4

5 に答える 5

4

これは、「true-true」または「truthy-false」のいずれかである「true」値を返します。

Ruby では、truey-false であることが 2 つだけあります。

  • false(シングルトン オブジェクト)
  • nil(シングルトン オブジェクト)

それ以外はすべて真であると見なされます。多くの Ruby コードは、この事実を述語に利用しています。述語のチェックは、次のようにする必要があります。

if list.empty?

いいえ:

if list.empty? == true
于 2012-04-20T18:14:07.907 に答える
2
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 ではfalseand を除いてすべてが true であるためnilです。

このリンクdefined?には、オペレーターに関するより多くの情報があります。

于 2012-04-20T18:20:48.957 に答える
0

これは慣例であり、言語の一部ではないため、疑問符に関する実際の規則はありません。http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/より

「慣例により、質問に答えるメソッド (つまり、Array#empty? はレシーバーが空の場合に true を返す) は疑問符で終わります。」

于 2012-04-20T18:13:04.707 に答える
0

"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
于 2012-04-20T18:20:24.663 に答える
0

引数 (任意の式) が定義されていない場合、defined?演算子は戻ります。定義されていない場合は、その引数の説明を返します。nil

は falseとnil評価され、(false を除く) 他のすべての式は true と評価されるため、 の動作はdefined?期待どおりです。

于 2012-04-20T18:23:40.050 に答える