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