问号运算符在Ruby中意味着什么?

时间:2009-08-28 09:05:51

标签: ruby

Ruby中问号运算符的用途是什么?

有时看起来像这样:

assert !product.valid?

有时它位于if构造中。

9 个答案:

答案 0 :(得分:265)

这是一种代码风格的约定;它表示方法返回一个布尔值。

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

答案 1 :(得分:75)

另请注意?以及字符,将返回A

的ASCII字符代码

例如:

?F # => will return 70

或者在红宝石1.8中你可以这样做:

"F"[0]

或红宝石1.9:

"F".ord

另请注意?F将返回字符串"F",因此为了缩短代码,您还可以在Ruby 1.9中使用?F.ord来获得与{"F".ord相同的结果1}}。

答案 2 :(得分:38)

Ruby中的一个约定是返回布尔值的方法以问号结尾。没有比这更重要的了。

答案 3 :(得分:24)

在您的示例中,它只是方法名称的一部分。在Ruby中,您还可以在方法名称中使用感叹号!

Ruby中问号的另一个例子是三元运算符。

customerName == "Fred" ? "Hello Fred" : "Who are you?"

答案 4 :(得分:15)

在你的例子中

product.valid?

实际上是一个函数调用并调用一个名为valid?的函数。某些类型的“条件测试”/布尔函数按惯例将问号作为函数名称的一部分。

答案 5 :(得分:12)

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

相关:Why can't a variable name end with `?` while a method name can?

答案 6 :(得分:6)

我相信这只是布尔事物的约定。有点像说“IsValid”。

答案 7 :(得分:1)

它也用在正则表达式中,意思是“最多只重复一次前面的字符”

例如,正则表达式/hey?/与字符串“he”和“hey”匹配。

答案 8 :(得分:0)

使用test

Kernel#test方法的第一个参数也是一种常见惯例
irb(main):001:0> test ?d, "/dev" # directory exists?
=> true
irb(main):002:0> test ?-, "/etc/hosts", "/etc/hosts" # are the files identical
=> true

如此问题here

中所示