如果我有这样的config.ru文件:
def my_method
1+2
end
require 'my_sinatra_app'
run Sinatra::Application
从my_sinatra_app.rb中调用my_method会返回“未定义的方法`my_method'for main:Object ”。
作为顶级方法,它应该可以从任何地方访问;为什么my_method无法从my_sinatra_app.rb中访问?
答案 0 :(得分:3)
config.ru
在instance_eval
中Rack::Builder
,因此您在其中定义的方法不在顶级范围内。如果您想将它们作为顶级方法,可以尝试将它们放在另一个文件中,并require
从config.ru
进行p self # => #<Rack::Builder:0x1234123412 @ins=[]>
run lambda {|e|[200,{},[""]]}
。
前 config.ru
{{1}}
答案 1 :(得分:1)
我认为您可以将其定义为模块:
module MyMethodsModule
def self.my_method
#Method body
end
end
然后调用它的方法:
::MyMethodsModule.my_method