Ruby Padrino/Sinatra路线中的常数
在Sinatra/Padrino,在何处添加常数以便在路线内使用是明智的 我正在使用Padrino挂载多个应用程序,因此我希望所有应用程序都可以使用常量。(所有应用都从基类继承。) 我曾经添加过在路由内部使用的方法 我希望对常数采用类似的方法 更新 这似乎是一个范围问题,但我不知道这个场景中出了什么问题 下面是一个简化的padrino应用程序,它演示了问题: app.rbRuby Padrino/Sinatra路线中的常数,ruby,sinatra,padrino,Ruby,Sinatra,Padrino,在Sinatra/Padrino,在何处添加常数以便在路线内使用是明智的 我正在使用Padrino挂载多个应用程序,因此我希望所有应用程序都可以使用常量。(所有应用都从基类继承。) 我曾经添加过在路由内部使用的方法 我希望对常数采用类似的方法 更新 这似乎是一个范围问题,但我不知道这个场景中出了什么问题 下面是一个简化的padrino应用程序,它演示了问题: app.rb classmyprojectMyProject p self.class.constants#=>[:DATA_ATTRIB
classmyproject
controllers.rb
MyProject.controller do
得到“/”做
p self.class#=>MyProject
p self.class.constants#=>[:DATA_ATTRIBUTES,…,:MY_CONST,…]
p MyProject::MY_CONST#=>123
p MY_CONST#=>NameError-未初始化常量MY_CONST
结束
结束
嗯,也许我不明白,但你可以使用apps.rb
Padrino.configure do
set :foo, :bar
end
然后,您应该能够在所有应用程序中检索您的var
或者在boot或apps.rb中添加类似的内容:
MY_CONST = 1
MyConst = 1
嗯,也许我不明白,但你可以使用apps.rb
Padrino.configure do
set :foo, :bar
end
然后,您应该能够在所有应用程序中检索您的var
或者在boot或apps.rb中添加类似的内容:
MY_CONST = 1
MyConst = 1
好的,显然我遇到了一个问题,Ruby如何处理实例求值过程中的持续查找 以下是一种无需Padrino的方法来重新创建错误:
class Thing
MY_CONST = 123
def doStuff (&block)
p "doStuff: #{self.class}" # => "doStuff: Thing"
p "doStuff: #{MY_CONST}" # => "doStuff: 123"
instance_eval &block
end
def doOtherStuff (&block)
p "doOtherStuff: #{self.class}" # => "doOtherStuff: Thing"
p "doOtherStuff: #{MY_CONST}" # => "doOtherStuff: 123"
yield
end
end
t = Thing.new
t.doStuff do
doOtherStuff do
p self.class # => Thing
p self.class.constants # => [:MY_CONST]
p Thing::MY_CONST # => 123
p MY_CONST # => NameError: uninitialized constant MY_CONST
end
end
相关问题:
相关博文:
因此,我的选择似乎仅限于:
好的,显然我遇到了一个问题,Ruby如何处理实例求值过程中的持续查找 以下是一种无需Padrino的方法来重新创建错误:
class Thing
MY_CONST = 123
def doStuff (&block)
p "doStuff: #{self.class}" # => "doStuff: Thing"
p "doStuff: #{MY_CONST}" # => "doStuff: 123"
instance_eval &block
end
def doOtherStuff (&block)
p "doOtherStuff: #{self.class}" # => "doOtherStuff: Thing"
p "doOtherStuff: #{MY_CONST}" # => "doOtherStuff: 123"
yield
end
end
t = Thing.new
t.doStuff do
doOtherStuff do
p self.class # => Thing
p self.class.constants # => [:MY_CONST]
p Thing::MY_CONST # => 123
p MY_CONST # => NameError: uninitialized constant MY_CONST
end
end
相关问题:
相关博文:
因此,我的选择似乎仅限于:
你可以添加一个类常量,它们应该在任何地方都可用,就像应用程序类中的类变量一样?添加到扩展Padrino::Application的应用程序类的常量在routes中不可用。您可以添加一个类常量,它们应该在任何地方都可用,就像应用程序类中的类变量一样?添加到扩展Padrino::Application的应用程序类的常量在routes.OK中不可用。我现在可以在路线中使用“settings.foo”。这是一个进步:-)我仍然希望我的路线可以使用常量,就像它们是本地的一样(即:无范围)。那不可能吗?再次谢谢。我还假设将该常量添加到app.rb会很好。但我还是有问题。我已经用示例代码更新了这个问题。谢谢。如果您想在全局环境中使用它,请将其保留在类外,否则请查看
namererror
的最后一部分,它将显示未初始化常量MY_CONST for…
OK cool。我现在可以在路线中使用“settings.foo”。这是一个进步:-)我仍然希望我的路线可以使用常量,就像它们是本地的一样(即:无范围)。那不可能吗?再次谢谢。我还假设将该常量添加到app.rb会很好。但我还是有问题。我已经用示例代码更新了这个问题。谢谢。如果您想在全局环境中使用它,请将其保留在类外,否则请查看namererror
的最后一部分,它将显示未初始化常量MY_CONST for…