我目前正在处理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,一切似乎都是我期望的,所以我不确定。