首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Padrino/Sinatra路线的常数

Padrino/Sinatra路线的常数
EN

Stack Overflow用户
提问于 2012-09-19 09:40:38
回答 2查看 1.7K关注 0票数 1

在辛纳屈/帕德里诺,哪里是增加常量供路线内部使用的合理地方?

我使用Padrino来挂载多个应用程序,所以我希望所有应用程序都可以使用常量。(所有应用程序都是从基类继承的。)

我使用Sinatra.helpers来添加用于内部路由的方法。

我希望对常量也有类似的处理方法。

更新

这似乎是一个范围界定的问题,但我不知道在这种情况下出了什么问题。

下面是一个精简的padrino应用程序,它演示了这个问题:

app.rb

代码语言:javascript
复制
class MyProject < Padrino::Application
  register Padrino::Rendering
  register Padrino::Mailer
  register Padrino::Helpers

  MY_CONST = 123
end

controllers.rb

代码语言:javascript
复制
MyProject.controller do
  get "/" do
    p self.class            # => MyProject
    p self.class.constants  # => [:DATA_ATTRIBUTES, ... <snip>..., :MY_CONST, ... <snip>... ]
    p MyProject::MY_CONST   # => 123
    p MY_CONST              # => NameError - uninitialized constant MY_CONST
  end
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-24 07:52:31

好的,很明显,我遇到了一个问题,就是Ruby如何处理instance_evaled程序中的常量查找。

下面是一种不使用Padrino的方法来重新创建错误:

代码语言:javascript
复制
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

相关问题:Ruby1.9中的eval

相关博客文章:http://jfire.io/blog/2011/01/21/making-sense-of-constant-lookup-in-ruby/

因此,我的选择似乎仅限于:

  1. 使用全局常量
  2. 完全指定常量(如上面示例中的Thing::MY_CONST )
  3. 用一种方法代替
票数 1
EN

Stack Overflow用户

发布于 2012-09-19 15:12:52

嗯,也许我不明白,但你可以用apps.rb

代码语言:javascript
复制
Padrino.configure do
   set :foo, :bar
end

那么您应该能够在您的所有应用程序中检索您的var。

或者在引导或apps.rb中添加一些类似的内容:

代码语言:javascript
复制
MY_CONST = 1
MyConst = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12492167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档