3
類
我有點困惑,爲什麼下面這段代碼實際工作:紅寶石:猴子打補丁字符串
String.instance_eval do # self is set to String
[:readlink, :symlink?, :expand_path].each do |method| # self is still String
define_method(method) do # self is still String
File.send(method, self) # what exactly is this self?
end
end
end
"asdf".expand_path # => "C:/users/some_user/asdf"
我不明白爲什麼最後一行的工作,因爲它確實。當每個方法定義的方法不是相當於File.send(method, String)
的方法?以上所有區塊實際上並沒有改變self
。唯一改變self
的行是String.instance_eval
,它將self
更改爲String
。
好吧,我的理解是,塊關閉所有變量的定義點。我把「自我」放在了這個變量中,但顯然它具有更多的動態性。 – davidk01