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