也許我只是對結構不夠了解而盲目地使用它們,但下面的結果對我來說似乎不合理。爲什麼這個變量消失在一個結構中?
class VarTest < Struct.new(:email)
def perform
puts "Start: #{email}"
if email == "nothing"
email = "bad email"
end
puts "End: #{email}"
end
end
VarTest.new("[email protected]").perform
意外的輸出:
Start: [email protected]
End:
如果我的代碼更改爲:
class VarTest < Struct.new(:email)
def perform
e = email
puts "Start: #{e}"
if e == "nothing"
e = "bad email"
end
puts "End: #{e}"
end
end
VarTest.new("[email protected]").perform
我們得到預期的輸出:
Start: [email protected]
End: [email protected]
有人能解釋一下這是怎麼回事?
謝謝。
實際的目標是什麼?換句話說,爲什麼你使用繼承而不是僅僅是'VarTest = Struct.new(:email)'然後'VarTest.new('[email protected]')'? – 2012-03-24 23:28:07
它被延遲工作用作入隊的一部分。無論如何,爲什麼以這種方式使用它會導致這種行爲? – chrishomer 2012-03-24 23:30:06