为什么这个if语句的块似乎是在ruby中的条件之前执行的?

时间:2016-01-24 20:06:33

标签: ruby operator-precedence

我目前正在处理a codegolf challenge,因此我尝试使用尽可能少的字符。

此代码:

#example data
x=[1,2,3]
a=5.times.map{5.times.map{' '}}
#problematic code:
a[b][c]=x.pop if a[b=rand(5)][c=rand(5)] == ' '

返回一个(非常奇怪的)错误:

test.rb:5:in `<main>': undefined local variable or method `b' for main:Object (NameError)
Did you mean?  b

归结为“无法找到b,您的意思是b吗?”。 (答案是肯定的)。

仅在带有内联if 语句的 2D数组时才会发生这种情况。

此代码也运行良好:

if a[b=rand(5)][c=rand(5)] == ' '
  a[b][c]=x.pop
end

它似乎应该完全相同,但它的行为却不同。这是为什么?

我认为它可能与优先级有关,但我看了the ruby precedence table,一切似乎都是我期望的,所以我不确定。

0 个答案:

没有答案