在Ruby中使用问号运算符的目的是什么?

有时它是这样的:

assert !product.valid?

有时它在if结构中。


当前回答

值得指出的是,只允许在方法名中使用?,变量名中不允许使用?。在学习Ruby的过程中,我假设?指定一个布尔返回类型,所以我尝试将它们添加到标志变量,导致错误。这导致我错误地认为有一些特殊的语法涉及?

相关:为什么变量名不能以'结尾?而方法名可以?

其他回答

在你的例子中

product.valid?

实际上是一个函数调用并调用一个名为valid的函数?。根据约定,某些类型的“test for condition”/布尔函数在函数名中有一个问号。

值得指出的是,只允许在方法名中使用?,变量名中不允许使用?。在学习Ruby的过程中,我假设?指定一个布尔返回类型,所以我尝试将它们添加到标志变量,导致错误。这导致我错误地认为有一些特殊的语法涉及?

相关:为什么变量名不能以'结尾?而方法名可以?

我相信这只是布尔值的一种惯例。有点像说“IsValid”。

这是一种代码风格的约定;它指示一个方法返回一个布尔值(真或假)或一个对象来指示一个真值(或“真”值)。

问号是方法名末尾的有效字符。

https://docs.ruby-lang.org/en/2.0.0/syntax/methods_rdoc.html#label-Method+Names

使用来自Kernel#test的测试方法的第一个参数也是一种常见的约定

test ?d, "/dev" # directory exists?
# => true
test ?-, "/etc/hosts", "/etc/hosts" # are the files identical
# => true

从这个问题中可以看出