我想声明一个浮点变量,稍后我会做一些计算。但是,解释器推断变量是Array
,并且当我尝试将变量用作浮点数时稍后会产生错误。
avg = 0.0, nr = 0
p "avg is #{avg.class} "
输出以下内容:
"avg is Array "
答案 0 :(得分:4)
您的代码没有按照您的想法执行,而且很容易看到:
> a=2, b=3
=> [2, 3]
> b
=> 3
> a
=> [2, 3]
对变量使用单独的语句或使用以下格式:
avg, nr = 0.0, 0
答案 1 :(得分:3)
你不能那样声明变量。
avg = 0.0
nr = 0
答案 2 :(得分:2)
请改为尝试:
avg, nr = 0.0, 0
答案 3 :(得分:2)
你在Ruby中实际写的是:
avg=(0.0,nr=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
并将其插入数组中。
答案 4 :(得分:2)
这里没有涉及类型推断(或者通常在Ruby中),问题是Ruby如何解析你的表达式。您可能会将{ "Name":"Bob", "Pets":[ {"Type":"Cat", "Nam
解释为avg = 0.0, nr = 0
而不是avg = (0.0, (nr = 0))
。因此,为(avg = 0.0), (nr = 0)
分配了avg
,因为implicit array assignment,[0.0, 0]
被分配了整数nr
。除了0
的分配外,它与表达式nr
:
avg = 0.0, 0
在Ruby中执行multiple assignment的正确方法是:
avg = 0.0, nr = 0
p avt # => [0.0, 0]
p nr # => 0
avg = 0.0, 0
p avg # => [0.0, 0]
或者只使用两个不同的赋值表达式:
avg, nr = 0.0, 0
答案 5 :(得分:1)
用分号或换行符替换逗号。 Ruby中的逗号不会像你希望的那样表现。