为什么类型转换不能正确地与 $.在 Ruby?

Why type-casting don't properly work with $. in Ruby?

我有一个 Ruby 代码,如下所示,Try it online!

loop{p$.+=1r}

和另一个,我只是将 1r 除以 2,如下所示,Try it online!

loop{p$.+=1r/2}

据我猜测,$. 的类型转换无法正常工作。在第一种情况下,它可以正常工作,但在第二种情况下,它不能。 奇怪!

那么,为什么会这样呢?或者,也许我的猜测是错误的,那么实际问题是什么,如何解决?


通常,Integer 被向上转换为更复杂的数据类型,like in this code,它似乎有效。

它工作正常,$. 变量的类型是 Integer

puts $..class. # => Integer

所以右边的加法会被强制转换为Integer.
在第一种情况下,1r 被转换为值 1Integer,因此您可以看到值正在发生变化。

在第二种情况下 1r/2 被转换为值 0 的整数,因此您看不到任何变化,因为添加零不会改变原始值。

您不能更改预定义全局变量的类型,只需尝试$. = "text"