我很长一段时间以来一直是Javascript开发人员,我已经习惯了......
var globalVar = "some value";
getGlobalVar = function(){
alert(globalVar);
}
getGlobalVar();

在Javascript中,在函数外部定义的所有内容都附加到窗口对象,并成为全局范围的一部分。任何属于全球范围的东西都可以在任何函数中访问 - 至少就我所知。我试图在Ruby中做类似的事情,但我收到了一个错误。
以下是我如何使用代码:
# create CoreController
SINATRA = Sinatra
module Apollo
class Sinatra < SINATRA::Base
configure :development do
register SINATRA::Reloader
also_reload "app/**/*.rb"
dont_reload "lib/**/*.rb"
end
include CoreHelpers
include Helpers
# ----- Config ------
configure do
set :public_folder, Apollo.config[:sinatra][:public]
set :views, Apollo.config[:sinatra][:views]
set :static_cache_control, [:public, {:max_age => 600}]
enable :sessions
# Set the session secret
set :session_secret, "secret"
end
end
end
我添加了SINATRA = Sinatra
作为黑客,因为我无法访问Sinatra::Reloader
内的class Sinatra < SINATRA::Base
。
这就是我希望代码看起来像:
# create CoreController
module Apollo
class Sinatra < Sinatra::Base
configure :development do
register Sinatra::Reloader
also_reload "app/**/*.rb"
dont_reload "lib/**/*.rb"
end
include CoreHelpers
include Helpers
# ----- Config ------
configure do
set :public_folder, Apollo.config[:sinatra][:public]
set :views, Apollo.config[:sinatra][:views]
set :static_cache_control, [:public, {:max_age => 600}]
enable :sessions
# Set the session secret
set :session_secret, "secret"
end
end
end
以下是我遇到的错误:
如何将此代码放入类中更改范围?不可能在任何地方访问全局变量吗?任何和所有的帮助表示赞赏。
答案 0 :(得分:1)
我不确定我是否掌握了所有的技术性,但是当你有班级Sinatra并且你在类块中使用Sinatra :: Something时,ruby将其解释为&#34;他想要访问常量Something in this类&#34 ;. 如果你将班级名称更改为Sinatra以外的其他名称,那么你应该没问题。或者您可以使用双冒号作为前缀,如此
# create CoreController
module Apollo
class Sinatra < ::Sinatra::Base
configure :development do
register ::Sinatra::Reloader
also_reload "app/**/*.rb"
dont_reload "lib/**/*.rb"
end
include CoreHelpers
include Helpers
# ----- Config ------
configure do
set :public_folder, Apollo.config[:sinatra][:public]
set :views, Apollo.config[:sinatra][:views]
set :static_cache_control, [:public, {:max_age => 600}]
enable :sessions
# Set the session secret
set :session_secret, "secret"
end
end
end
它基本上说红宝石在Sinatra班级之外寻找另一个Sinatras。