为什么configat中定义的顶级方法不能被Sinatra :: Application访问?

时间:2011-05-08 20:09:16

标签: ruby sinatra rack

如果我有这样的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中访问?

2 个答案:

答案 0 :(得分:3)

config.ruinstance_evalRack::Builder,因此您在其中定义的方法不在顶级范围内。如果您想将它们作为顶级方法,可以尝试将它们放在另一个文件中,并requireconfig.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