我查看了0.methods
中的irb
输出,看不到ruby解释器在传递0.15
而不是0.to_s
时会采取什么路径
我已经尝试过了解ruby如何确定正在定义的浮点数与在整数上调用的方法之间的差异,但我还没有得出任何结论。
我最好的猜测是因为Ruby不允许数字引导方法名称,它只是检查.
后面的字符是数字还是字母。
我不喜欢猜测,假设会导致误解。有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
您如何阅读Yacc文件? (修辞问题)
https://github.com/ruby/ruby/blob/trunk/parse.y#L7380我相信这是Ruby解析器处理浮点标记化的地方。
免责声明:parse.y伤害了我的头脑。
答案 1 :(得分:0)
作为Methods in Ruby cannot begin with numbers,很容易确定6.foo
是方法调用而6.12
是Float
。
您可以通过非常简单的常规语法规范来区分它们,这是Lexer需要对源代码进行标记的所有内容。
答案 2 :(得分:-3)
我不确定,但我认为可以安全地假设两者的方法名称无法以数字开头。
我不认为这是一个特别有趣或有用的事情,我认为你的好奇心最好指向其他地方。