Ruby中输入错误的foo.&bar语法解析为何种含义?
Ruby中
.&语法的解析逻辑 你遇到的.&其实是Ruby里按位与运算符&的显式方法调用形式,和直接写foo & bar完全等价——本质就是调用foo对象的&实例方法,参数为bar。
拆解你碰到的两种场景:
- 第一次输入
foo.&bar时,Ruby会优先解析参数bar:由于bar既不是已定义的局部变量,也不是可用方法,直接抛出NameError报错,甚至没走到调用foo的&方法这一步。 - 当你定义
bar = 42后,foo.&bar就等同于foo & 42。如果此时foo是nil(比如你之前在irb中隐式赋值过,或是irb对未定义变量的特殊处理导致),NilClass的&方法逻辑是:若右侧操作数为真值(非nil/false),返回右侧值;否则返回nil。所以nil & 42会返回42,这就是你看到的运行结果。
顺带提一句:Ruby里绝大多数运算符(除and/or这类关键字运算符)都对应实例方法,比如+对应#+、*对应#*,&也不例外,.&(参数)就是显式调用这个方法的写法,和运算符形式功能完全一致。
内容的提问来源于stack exchange,提问作者Silvio Mayolo
相关产品推荐
相关产品推荐

