【问题标题】:why does this variable in constants.rb need to be declared to be global?为什么constants.rb中的这个变量需要声明为全局变量?
【发布时间】:2012-05-07 08:20:53
【问题描述】:

我希望整个应用程序都可以使用一个列表,所以我把它放在 constants.rb 中:

hebrew_consonants = ["א", "ב", "ג", "ד", "ה", "ו", "ז", "ח", "ט", "י", "ך", "כ", "ל","ם","מ","ן", "נ", "ס", "ע", "ף", "פ", "ץ", "צ", "ק", "ר", "ש","ת"]

在application_controller.rb中,我使用的列表如下:

def is_hebrew?(query)
    (0...query.length).each do |index|
        return true if hebrew_consonants.include?(query[index])
    end
    return false
end

我重新启动了服务器,但应用程序抱怨它不知道该列表。我在它的声明和它的引用($hebrew_consonants)之前加上了美元符号,它起作用了。使用我的其他常量,它们就可以工作。我想我认为它们应该只是因为在那个类中而成为全局变量。为什么这个行为不同?

谢谢

【问题讨论】:

  • P.S.我知道列表声明看起来很古怪,但我认为它只是粘贴从右到左的字符。它确实有效。

标签: ruby-on-rails global-variables constants


【解决方案1】:

首先确保您的constants.rb 文件位于/config/initializers/ 中。其次,尝试对hebrew_constants 使用全部大写。从 SO question 中的 cmets 看来,所有大写字母都是必要的。

【讨论】:

  • 全部大写都有效,我之前没有意识到,我将其他常量全部大写只是作为惯例。谢谢
猜你喜欢
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多