在Ruby中使用问号运算符的目的是什么?
有时它是这样的:
assert !product.valid?
有时它在if结构中。
在Ruby中使用问号运算符的目的是什么?
有时它是这样的:
assert !product.valid?
有时它在if结构中。
当前回答
使用来自Kernel#test的测试方法的第一个参数也是一种常见的约定
test ?d, "/dev" # directory exists?
# => true
test ?-, "/etc/hosts", "/etc/hosts" # are the files identical
# => true
从这个问题中可以看出
其他回答
Ruby中有一个约定,返回布尔值的方法以问号结尾。没有比这更重要的了。
还要注意?自Ruby 1.9以来,字符作为单字符字符串文字的简写。
例如:
?F # => is the same as "F"
这是在ruby文档中字符串字面量部分的底部引用的:
还有一种字符文字表示法来表示单字 字符串,其语法是问号(?)后面跟着 对应于单个的单个字符或转义序列 脚本编码中的代码点: ?a #=> "a" ?abc #=>语法错误 \n #=> "\n" \s #=> " " \\ #=> "\\" \u{41} #=> "A" \C-a #=> "\x01" \M-a #=> "\xE1" \M-\C-a #=> "\x81" \C-\M-a #=> "\x81",同上 ?あ#=> "あ"
在Ruby 1.9之前,它返回字符的ASCII字符代码。要获得现代Ruby中的旧行为,你可以使用#ord方法:
?F.ord # => will return 70
这是一种代码风格的约定;它指示一个方法返回一个布尔值(真或假)或一个对象来指示一个真值(或“真”值)。
问号是方法名末尾的有效字符。
https://docs.ruby-lang.org/en/2.0.0/syntax/methods_rdoc.html#label-Method+Names
值得指出的是,只允许在方法名中使用?,变量名中不允许使用?。在学习Ruby的过程中,我假设?指定一个布尔返回类型,所以我尝试将它们添加到标志变量,导致错误。这导致我错误地认为有一些特殊的语法涉及?
相关:为什么变量名不能以'结尾?而方法名可以?
它也用于正则表达式中,意思是“最多重复前一个字符一次”
例如正则表达式/hey?/匹配字符串"he"和"hey"。