Ruby中的问号运算符是什么意思?

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

有时候看起来像这样:

assert !product.valid? 

有时它是在一个if构造。

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

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

还要注意? 以及一个字符,将返回A的ASCII字符代码

例如:

 ?F # => will return 70 

另外在ruby1.8你可以做:

 "F"[0] 

或在ruby1.9:

 "F".ord 

另外请注意, ?F将返回string"F" ,所以为了使代码更短,您也可以在Ruby 1.9中使用?F.ord以得到与"F".ord相同的结果。

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

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

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

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

在你的例子中

 product.valid? 

实际上是一个函数调用,并调用一个名为valid?的函数valid? 。 按照惯例,某些types的“testing条件”/布尔函数具有问号作为函数名称的一部分。

值得指出的是,只允许使用方法名称而不是variables。 在学习Ruby的过程中,我是这么认为的? 指定一个布尔返回types,所以我试图添加它们来标记variables,导致错误。 这导致我错误地认为有一段时间涉及到一些特殊的语法。

相关: 为什么variables名不能以`?`结尾而方法名可以?

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

它也用在正则expression式中,意思是“至多重复前一个字符”

例如正则expression式/hey?/匹配string“ he ”和“ hey ”。

使用Kernel#test的testing方法的第一个参数也是一个常见的约定

 irb(main):001:0> test ?d, "/dev" # directory exists? => true irb(main):002:0> test ?-, "/etc/hosts", "/etc/hosts" # are the files identical => true