为什么类型转换不能与 $.在红宝石?

问题描述

我有一个如下所示的 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 被转换为值 Integer1,因此您可以看到值正在发生变化。

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

你不能改变预定义全局变量的类型,试试$. = "text"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...