为什么类型转换不能正确地与 $.在 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
被转换为值 1
的 Integer
,因此您可以看到值正在发生变化。
在第二种情况下 1r/2
被转换为值 0
的整数,因此您看不到任何变化,因为添加零不会改变原始值。
您不能更改预定义全局变量的类型,只需尝试$. = "text"
我有一个 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
被转换为值 1
的 Integer
,因此您可以看到值正在发生变化。
在第二种情况下 1r/2
被转换为值 0
的整数,因此您看不到任何变化,因为添加零不会改变原始值。
您不能更改预定义全局变量的类型,只需尝试$. = "text"