这里有什么问题?我不知道这两个片段的表现如何不同,但他们确实如此。
完整代码,尝试使用其中一个:
class T
def initialize
@e=[4,2]
end
def shift
r=@e.shift
puts "[#{r.inspect}]"
r
end
end
exns=T.new
while (p || (p=exns.shift))
#while p ||= exns.shift
puts "p: #{p.inspect}"
p -= 1
p=nil if p<1
puts " #{p.inspect}"
puts "T" if p
end
&#39; while(p ||(p = exns.shift))&#39;由于某种原因,似乎永远不会发生短路。我想知道原因。
答案 0 :(得分:4)
您的问题在于您选择为变量命名的字母 - p
与其他字母(例如q
)不同,因为它也是内核方法p()
的名称:
p
# => nil
q
# NameError: undefined local variable or method `q' for main:Object
因为这个原因,因为你没有在while循环之前定义一个局部变量名p
,所以它实际上只在循环范围内声明 。
要了解这一点至关重要,只需在循环之前添加以下行:
p = nil
现在,两种选择都是一样的。