3

我查看了0.methods输出,irb看不到 ruby​​ 解释器在传递时会采用什么路径,0.15而不是0.to_s

我已经尝试阅读 ruby​​ 如何确定定义的浮点数和在整数上调用的方法之间的差异,但我没有得出任何结论。

我的最佳猜测是,因为 Ruby 不允许数字引导方法名称,它只是检查后面的字符.是数字还是字母。

我不喜欢猜测,假设会导致误解。有人可以帮我解决这个问题吗?

4

3 回答 3

3

你对 Yacc 文件的阅读能力如何?(反问)

https://github.com/ruby/ruby/blob/trunk/parse.y#L7380我相信这是 Ruby 解析器处理浮点标记化的地方。

免责声明:parse.y 让我头疼。

于 2013-07-29T16:14:53.413 回答
0

由于Ruby 中的方法不能以数字开头,因此很容易确定它6.foo是 Method 调用6.12还是Float.

您可以通过非常简单的常规语法规范来区分它们,这就是 Lexer 对源代码进行标记所需的全部内容。

于 2013-07-29T11:31:18.480 回答
-3

我不确定,但我认为可以安全地假设两者的区别在于方法名称无法以数字开头。

我不认为知道这是一件特别有趣或有用的事情,而且我认为您的好奇心最好转移到其他地方。

于 2013-07-29T11:27:33.317 回答