基本上我不知道如何將在Ruby對象回調,這樣,當一個對象,無論如何變化,我可以自動觸發其他變化:紅寶石:在「ATTR」有回調對象
(編輯:我因爲@proxy是一個URI對象,它擁有它自己的方法,通過使用它自己的方法來改變URI對象並不會調用我自己的方法並更新@http對象)
class MyClass
attr_reader :proxy
def proxy=(string_proxy = "")
begin
@proxy = URI.parse("http://"+((string_proxy.empty?) ? ENV['HTTP_PROXY'] : string_proxy))
@http = Net::HTTP::Proxy.new(@proxy.host,@proxy.port)
rescue
@http = Net::HTTP
end
end
end
m = MyClass.new
m.proxy = "myproxy.com:8080"
p m.proxy
# => <URI: @host="myproxy.com" @port=8080>
m.proxy.host = 'otherproxy.com'
p m.proxy
# => <URI: @host="otherproxy.com" @port=8080>
# But accessing a website with @http.get('http://google.com') will still travel through myproxy.com as the @http object hasn't been changed when m.proxy.host was.
你是什麼意思「作爲代理=不被稱爲」?當然,它被稱爲。 – sepp2k 2010-05-25 15:00:11
我不明白,你會得到'Net :: HTTP' ...?如果添加'attr_reader:http'並檢查'p m.http',可以檢查它。當'm.proxy'改變時,'proxy ='不會被調用嗎?該函數調用是唯一發生的事情 - 您不能直接在Ruby中更改實例變量。 – Amadan 2010-05-25 15:02:14
啊褲子,我在我的例子中迷惑了自己!如果@proxy URI對象的子對象發生更改(請參閱我的示例代碼的最後4行),則不會調用'proxy ='方法 - 希望這更有意義嗎? – 2010-05-26 08:48:03