当您在整数上调用方法或者设置浮点数时,ruby解释器如何判断?

时间:2013-07-29 11:09:51

标签: ruby

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

我已经尝试过了解ruby如何确定正在定义的浮点数与在整数上调用的方法之间的差异,但我还没有得出任何结论。

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

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

3 个答案:

答案 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.12Float

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

答案 2 :(得分:-3)

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

我不认为这是一个特别有趣或有用的事情,我认为你的好奇心最好指向其他地方。