Tag: 常量

RAILS_ROOT需要吗?

我正在尝试访问驻留在/ lib目录中的文件中的RAILS_ROOT常量,但我无法(未初始化的常量错误)。 有什么我需要能够做到这一点吗?

`ClassName.constants`在Rails应用程序中返回空数组

我正在开发一个Rails 3应用程序,我的lib文件夹中有一个类的层次结构,例如: lib ├── assets ├── tasks │ └── import.rake └── importer ├── base.rb └── source ├── facebook.rb ├── google.rb └── twitter.rb 我已经更新了config/application.rb以包含这一行: config.autoload_paths += %W(#{config.root}/lib) 然后在Importer::Base里面,我有一个实例方法试图加载Provider模块中的所有类,例如: Importer::Source.constants.each do |class_name| Importer::Source.const_get(class_name).process end lib/importer/base的三个类具有类似于以下的类层次结构: module Importer module Source class Facebook # … end end end 当我调用此方法时, Importer::Source.constants最终返回一个空数组。 如果我直接通过名称引用它们,那么这些类似乎是延迟加载的,但它们在constants调用中是不可访问的。 我怎样才能解决这个问题?

为什么方法调用在原则上可以是常量时需要消除歧义?

方法调用通常可以省略接收器和参数的括号: def foo; “foo” end foo # => “foo” 在上面的例子中, foo在方法调用和对潜在局部变量的引用之间是不明确的。 在没有后者的情况下,它被解释为方法调用。 但是,当方法名称原则上可以是常量名称时(即,当它以大写字母开头,并且仅包含字母时),它似乎需要消除歧义。 def Foo; “Foo” end Foo # => NameError: uninitialized constant Foo Foo() # => “Foo” self.Foo # => “Foo” 为什么会这样? 为什么即使没有具有相同名称的常量,也需要将方法调用与对常量的引用明确区分开来?

在String和Classname之间转换

我有一个包含类名的字符串。 例如,它是包含“Article”的字符串。 该字符串来自params []。 我该怎么做才能使用这个字符串,好像它是一个类名? 例如,我想做: Article.all 等等。 任何的想法?

在Ruby中重新分配常量时抛出exception?

我早就意识到Ruby中的“常量”(即大写的变量名)并不是真正的常量。 与其他编程语言一样,对象的引用是唯一存储在变量/常量中的东西。 (补充工具栏:Ruby确实具有“冻结”被修改引用对象的function,据我所知,这不是许多其他语言提供的能力。) 所以这是我的问题:当你为一个常量重新赋值时,你得到一个警告: >> FOO = ‘bar’ => “bar” >> FOO = ‘baz’ (irb):2: warning: already initialized constant FOO => “baz” 有没有办法强制Ruby抛出exception而不是打印警告? 很难弄清楚为什么有时会进行重新分配。