Ruby编程:谓词方法

时间:2012-04-20 18:08:33

标签: ruby

我是Ruby的新手,遇到了defined?运算符。我认为?暗示该方法返回true / falsedefined?会返回标识符的描述(如果已定义)。

我知道有一个true / false组件标识符已定义或未定义但我认为?意味着返回值始终必须为{ {1}} / FALSE`。帮助

5 个答案:

答案 0 :(得分:4)

它返回“truthy”值,该值为“truthy-true”或“truthy-false”。

在Ruby中,只有只有两件事是真实的:

  • false(单身对象)
  • nil(单身对象)

任何 else被认为是真实的。大量的Ruby代码将这一事实用于谓词。因此,检查谓词应该是:

if list.empty?

if list.empty? == true

答案 1 :(得分: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

之所以这样做是因为除了falsenil之外,所有情况都是正确的。

link有关defined?运算符的更多信息。

答案 2 :(得分:0)

这只是一种约定而不是语言的一部分,因此没有围绕问号的实际规则。来自http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/

“按照惯例,回答问题的方法(即Array#empty?如果接收方为空则返回true)以问号结尾。”

答案 3 :(得分:0)

“non-nil”/ nil与Ruby中的true / false相同。如果您来自其他语言,您可能有使用true / false进行测试的习惯,但在Ruby中我们测试对象是否为零。

所以这两个是相同的:

a = 'hello'
if defined?(a) then puts a end

a = 'hello'
if defined?(a) != nil then puts a end

如果你坚持要返回true / false,你可以使用第二个。这将返回true / false:

a != nil

答案 4 :(得分:0)

defined?运算符如果未定义其参数(可以是任意表达式),则返回nil,否则返回该参数的描述。

由于nil的计算结果为false,并且(除了false)所有其他表达式的计算结果为true,因此defined?的行为符合预期。