這是一個關於Sinatra處理路線方法的前一個問題的更加集中的版本。爲什麼Sinatra複製路徑的方法塊?
從我的源代碼西納特拉採取的路線中的方法塊的理解,使含有相同的身體出即一種新的方法:
get "some/url" do
return "Hello World" # this gets taken out
end
所以在這個例子中,方法體似乎被複制轉變成適用於Sinatra物體的新方法。我只是想知道爲什麼會發生這種情況,我嘗試了他們的IRC頻道,但沒有人在那裏,郵件列表並不那麼繁忙。
主要大宗,我在他們的框架談論的源代碼是base.rb內圍繞線1180:
def generate_method(method_name, &block)
define_method(method_name, &block)
method = instance_method method_name
remove_method method_name
method
end
那麼,有沒有他們爲什麼這樣做,不只是引用任何具體原因該方法本身?
我問這個問題的原因是因爲Sinatra目前處理這個問題的方式使得它不可能擁有一種超越自身知識的方法,並且通過僅僅採用一種沒有上下文的方法來打破類封裝。
我認爲這個問題的答案已經很清楚了,這是我的誤解,認爲這是一種不是匿名方法的一流方法。它仍然沒有幫助我的*實際*問題,但這是另一個問題。 – Grofit
有一件事剛剛浮現在你的最後一個例子中,你展示了一種訪問匿名方法範圍之外的東西的方法,這非常棒... **是**我的問題,但是由看起來,唯一的方法是將其添加到幫助程序或使用set。這對於那些方法塊實際上可以完成你所需要的任何事情的小事物來說似乎非常棒,但是當你對其他類和實例有依賴關係時,你似乎將幾乎所有東西都添加到了幫助器中,以便將它放在範圍內。展示我所面臨的主要問題的一個問題是關於KL-7的其中一條評論。 – Grofit
您應該查看模塊化應用程序。 –