ruby - 对 ruby​​ CONSTANT 的困惑

标签 ruby constants

假设一个关于 CONSTANT 变量的简单 ruby​​ 程序:

OUTER_CONST = 99
class Const
  def get_const
    CONST
  end
  CONST = OUTER_CONST + 1
end

puts Const.new.get_const

我假设 Const.new.get_const 的结果应该是 nil,但结果是 100!我想知道为什么?

最佳答案

get_const 是一种方法,您在 CONST 定义之后调用它;所以当你调用它时 CONST 已经被定义了。

def get_const ... end 定义一个方法,不执行其内容;当您在 Const.new.get_const 行调用它时执行它的内容,所以当 CONST 已经定义时。

此外:如果在调用get_const 时未定义CONST,您将不会得到nil ,而是一个 NameError:

class Const
  def get_const
    CONST
  end
end

Const.new.get_const #=> NameError: uninitialized constant Const::CONST

关于ruby - 对 ruby​​ CONSTANT 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21883173/

相关文章:

ruby-on-rails - method_missing 当 `rake test` 加载模型时,尽管如果 Rails 加载模型则正确加载

ruby-on-rails - 如何让 Haml 与 Rails 一起工作?

C++,改变地址指针指向(指向一个常量值)

javascript - 如何在javascript中创建自定义对象的公共(public)常量实例?

python - 名称 'STDOUT' 未定义,但已导入子流程

ruby-on-rails - Rails 最佳实践误报未使用的方法

ruby - 有什么方法可以确定哪个对象调用了方法?

ruby - 在 Ruby 哈希中连接值

常量正确性和不可变分配对象

assembly - x86组装设备vs =