[英]Why do method declarations evaluate to nil in ruby?
定义一种方法似乎无法得出真实值,可以通过将其放入if
条件中来检查:
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
?
实际上它的值为nil
。 这很有道理; 为什么方法创建会返回任何东西?
irb(main):001:0> def test; print 'test'; end
=> nil
但是,它必须返回某些内容,因此要返回“ nothing”将返回nil
。
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
从Ruby的陷阱 :
非布尔数据的布尔评估是严格的:0,“”和[]都评估为true。 在C中,表达式0? 1:0等于0(即假)。 但是,在Ruby中,由于所有数字的计算结果均为true,因此得出1; 只有nil和false评估为false。 该规则的必然结果是,按惯例,Ruby方法(例如,正则表达式搜索)成功时返回数字,字符串,列表或其他非假值,但失败时返回零。 在Smalltalk中也使用此约定,在布尔表达式中,只有特殊对象true和false可以使用。
方法定义,例如def some_method; puts "random text"; end
def some_method; puts "random text"; end
def some_method; puts "random text"; end
总是返回nil 。
现在,这意味着该方法的评估值为nil 。 根据Ruby文档:
如果obj为nil或false,则返回false;否则返回false。 否则为真。
由于您的方法返回nil , 如果将其评估为false , 则执行else语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.