在紅寶石我想做的事情大致有以下幾種,並把它打印出「改變」:ruby:如何在另一個對象內引用@foo?
class Whatever
def change_foo
@foo="changed"
end
end
@foo = "original"
o = Whatever.new
o.change_foo
puts "it changed" if @foo == "changed"
puts "it did not change" if @foo == "original"
的問題,當然,這裏面Whatever
,@foo
屬於Whatever
一個實例。
有沒有辦法讓change_foo
更改「全球」foo?提出這個問題的另一種方式可能是「我可以引用什麼對象」擁有「@foo
?」。
我不想要像「使用全局變量」或「使用類變量」或「通過@foo
到change_foo
」的解決方案。我具體詢問了上述情況,我無法控制原始變量,也無法調用change_foo
。
我已經想出了一個解決方法,我在構造時通過了對全局對象的引用,但是我對它並不是很生氣,因爲它要求我在適當的範圍內實例化任何東西。
class Whatever
def initialize(main)
@main = main
end
def change_foo
@main.instance_variable_set("@foo","changed")
end
end
o = Whatever.new(self)
原因很簡單:別人使用jruby創建了一個DSL,無論出於何種原因,他們選擇將各種命令的中間結果存儲在名爲@response的變量中。由於這個變量在jruby和java中都被用於整個dsl,所以我堅持使用它。 – 2009-01-29 03:16:19