1

ifメソッドを定義することは、条件の中に1つ入れることで確認できるように、真の値に評価されないようです。

if(def some_method; puts "random text"; end) then
  puts "declaration evaluates to true"
else
  puts "declaration evaluates to false"
end
# => declaration evaluates to false

メソッド宣言はなぜ/どのように評価されnilますか?

4

4 に答える 4

5

実際には に評価されnilます。意味あり; メソッドの作成で何かが返されるのはなぜですか?

irb(main):001:0> def test; print 'test'; end
=> nil

ただし、何かを返さなければならないので、「何も返さない」というのは return になりnilます。

于 2013-03-19T22:09:35.327 に答える
2

Ruby のすべてのステートメントは何かに評価されます。ステートメントのdef値はチェックする必要がないため、 ですnil

リフレクティブな「メタプログラミング」メソッドで、探している動作を見つけることができますdefine_method

class EmptyClass

  m = define_method(:newmethod) {p "I am the new method"}
  p m # => <Proc:0x50b3f359@E:\NetBeansProjects\RubyApplication1\lib\main.rb:6>

end
于 2013-03-19T22:44:32.717 に答える
1

Ruby の落とし穴から:

非ブール データのブール評価は厳密です。0、""、および [] はすべて true と評価されます。C では、式 0 ? 1 : 0 は 0 (つまり false) と評価されます。ただし、Ruby では、すべての数値が true と評価されるため、結果は 1 になります。nil と false のみが false に評価されます。このルールの当然の帰結として、Ruby のメソッド (正規表現検索など) は慣例により、成功すると数値、文字列、リスト、またはその他の false 以外の値を返しますが、失敗すると nil を返します。この規則は Smalltalk でも使用され、特殊なオブジェクト true と false のみがブール式で使用できます。

于 2013-03-19T22:12:05.497 に答える
1

def some_method; puts "random text"; endalways return nilなどのメソッド定義。

これは、メソッドがnilに評価されることを意味します。Rubyのドキュメントによると:

obj が nil または false の場合は false を返します。それ以外の場合は true。

メソッドがnilを返すため、ifはそれをfalseと評価するため、else ステートメントを実行します。

于 2013-03-19T22:47:26.507 に答える