为什么`???? : ??`是合法的Ruby语句?适用版本有哪些?
语句合法性解释
你贴的???? : ??本质是Ruby三元运算符的省略空格写法,我们补全必要空格后就能一眼看懂结构:
?? ? ?? : ??
拆分每个token的含义:
??是Ruby的字符字面量语法:以?开头加单个可打印字符,等价于长度为1的冻结字符串,这里??就代表字符串"?"- 单独的
?和:共同组成三元运算符,语法规则为条件 ? 真分支返回值 : 假分支返回值,Ruby允许运算符和操作数之间省略空格,只要解析器能正确拆分token即可 - 第一个
??作为三元运算的判断条件,"?"属于非nil、非false的真值,所以会执行真分支 - 第二个
??是真分支的返回值,第三个??是假分支的返回值
整个语句执行后最终会返回字符串"?"。
支持的Ruby版本
- Ruby 1.9及以上版本:语句合法,返回值为字符串
"?",这是因为1.9版本将?x字符字面量的返回值从ASCII码改成了单字符字符串 - Ruby 1.8及更早版本:语法同样合法,只是返回值为
?对应的ASCII码数值63
内容的提问来源于stack exchange,提问作者tomshy
相关产品推荐
相关产品推荐

