Ruby 为什么config.ru中定义的顶级方法不能被Sinatra::Application访问?
如果我有这样一个config.ru文件:Ruby 为什么config.ru中定义的顶级方法不能被Sinatra::Application访问?,ruby,sinatra,rack,Ruby,Sinatra,Rack,如果我有这样一个config.ru文件: def my_method 1+2 end require 'my_sinatra_app' run Sinatra::Application 从my_sinatra_app.rb中调用my_方法将返回“main:Object的未定义方法`my_方法”” 作为一种顶级方法,它应该可以从任何地方访问;为什么我的方法不能从my\u sinatra\u app.rb中访问?config.ru在Rack::Builder中定义了instance\u e
def my_method
1+2
end
require 'my_sinatra_app'
run Sinatra::Application
从my_sinatra_app.rb中调用my_方法将返回“main:Object的未定义方法`my_方法””
作为一种顶级方法,它应该可以从任何地方访问;为什么我的方法不能从my\u sinatra\u app.rb中访问?
config.ru
在Rack::Builder
中定义了instance\u eval
,因此您在其中定义的方法不在顶级范围内。如果您想将它们作为顶级方法,可以尝试将它们放在另一个文件中,并从config.ru
中将它们删除
exconfig.ru
p self # => #<Rack::Builder:0x1234123412 @ins=[]>
run lambda {|e|[200,{},[""]]}
p self=>#
运行lambda{e}[200,{},[“”]}
config.ru
是instance\u eval
ed在Rack::Builder
中,因此您在其中定义的方法不在顶级范围内。如果您想将它们作为顶级方法,可以尝试将它们放在另一个文件中,并从config.ru
中将它们删除
exconfig.ru
p self # => #<Rack::Builder:0x1234123412 @ins=[]>
run lambda {|e|[200,{},[""]]}
p self=>#
运行lambda{e}[200,{},[“”]}
我认为您可以将其定义为一个模块:
module MyMethodsModule
def self.my_method
#Method body
end
end
然后调用它的方法:
::MyMethodsModule.my_method
我认为您可以将其定义为一个模块:
module MyMethodsModule
def self.my_method
#Method body
end
end
然后调用它的方法:
::MyMethodsModule.my_method
在你的应用程序中,你在哪里使用
my_method
?在config.ru和my_sinatra_app.rb的顶层(例如在configure…do块中),你在你的应用程序中在哪里使用my_method
?在config.ru和my_sinatra_app.rb的顶层(例如在configure…do块中),谢谢。这就解释了让我困惑的行为。谢谢。这就解释了让我困惑的行为。这并不能直接回答我的问题,但我试过了(为了科学!),但它不起作用。非常奇怪。在Ruby 1.9.3和Sinatra(pre)中,它很乐意工作。我会再检查一遍。这并不能直接回答我的问题,但我试过了(为了科学!),但它不起作用。非常奇怪。在Ruby 1.9.3和Sinatra(pre)中,它很乐意工作。我再查一下。