繁体   English   中英

为什么方法声明的值在ruby中为零?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM