2011-05-08 58 views
1

如果我有一個config.ru文件是這樣的:爲什麼在config.ru中定義的頂級方法不能被Sinatra :: Application訪問?

def my_method 
    1+2 
end 

require 'my_sinatra_app' 

run Sinatra::Application 

調用從my_sinatra_app.rb回報中my_method 「未定義的方法`my_method」主:對象」。

作爲頂級的方法,它應該可以從任何地方訪問;爲什麼在my_sinatra_app.rb中不能訪問my_method?

+0

你在哪裏使用'my_method'在你的應用程序中? – BaroqueBobcat 2011-05-08 20:44:15

+0

在config.ru和my_sinatra_app.rb的頂層(例如在configure ... do blocks中) – 2011-05-08 20:50:12

回答

3

config.ruinstance_eval編輯於Rack::Builder,因此您定義的方法不在頂層範圍內。如果您想將它們作爲頂級方法,您可以嘗試將它們放在另一個文件中,並從config.ru中將它們加入。

config.ru

p self # => #<Rack::Builder:0x1234123412 @ins=[]> 

run lambda {|e|[200,{},[""]]} 
+0

謝謝。這解釋了令我困惑的行爲。 – 2011-05-08 21:39:33

1

我想你可以把它定義爲一個模塊:

module MyMethodsModule 

    def self.my_method 
    #Method body 
    end 

end 

,然後調用其方法:

::MyMethodsModule.my_method 
+0

這並不直接回答我的問題,但我嘗試了它(科學!),它不起作用。 – 2011-05-08 21:44:20

+0

很奇怪。在Ruby 1.9.3和Sinatra(pre)中,它很樂意工作。我會再檢查一次。 – 2011-05-08 21:50:09

相關問題