Ruby异常类型推理
我想声明一个浮点变量,稍后我将使用它进行一些计算。但是,解释程序推断该变量是一个Ruby异常类型推理,ruby,Ruby,我想声明一个浮点变量,稍后我将使用它进行一些计算。但是,解释程序推断该变量是一个数组,当我尝试将该变量用作浮点时,会产生一个错误 avg = 0.0, nr = 0 p "avg is #{avg.class} " 产出如下: "avg is Array " 请尝试以下方法: avg, nr = 0.0, 0 不能那样声明变量 avg = 0.0 nr = 0 您的代码并不像您认为的那样,而且很容易看到: > a=2, b=3 => [2, 3] > b =>
数组
,当我尝试将该变量用作浮点时,会产生一个错误
avg = 0.0, nr = 0
p "avg is #{avg.class} "
产出如下:
"avg is Array "
请尝试以下方法:
avg, nr = 0.0, 0
不能那样声明变量
avg = 0.0
nr = 0
您的代码并不像您认为的那样,而且很容易看到:
> a=2, b=3
=> [2, 3]
> b
=> 3
> a
=> [2, 3]
对变量使用单独的语句或使用以下形式:
avg, nr = 0.0, 0
用分号或换行符替换逗号。Ruby中的逗号的行为与您希望的不同。您在Ruby中实际写的是:
avg=(0.0,nr=0)
avg, nr = 0.0, 0
Ruby将0.0作为第一个值,并进行赋值:
nr=0
它返回指定的值:
irb(main):003:0> avg = 0.0, nr = 0
=> [0.0, 0]
irb(main):005:0> nr = 0
=> 0
并将其插入数组。这里不涉及类型推断(或者在Ruby中,一般来说),问题是Ruby如何解析表达式
avg=0.0,nr=0
被解释为avg=(0.0,(nr=0))
而不是(avg=0.0),(nr=0)
。因此avg
被分配数组[0.0,0]
,因为nr
被分配整数0
。除了赋值给nr
,它等价于表达式avg=0.0,0
:
avg = 0.0, nr = 0
p avt # => [0.0, 0]
p nr # => 0
avg = 0.0, 0
p avg # => [0.0, 0]
在Ruby中执行测试的正确方法是:
avg=(0.0,nr=0)
avg, nr = 0.0, 0
或者只使用两种不同的赋值表达式:
avg = 0.0
nr = 0
用分号分隔语句
不是逗号,
,它是数组分隔符。