我可以使用方法而不是常量吗?

时间:2014-05-18 11:18:41

标签: ruby

使用常量代替返回这些常量的方法有什么意义吗?

class Foo
  LETTERS = [:a, :b, :c]
  # and them call it Foo::LETTERS
end

# or 
class Foo
  def self.letters
    [:a, :b, :c]
    # and then call it Foo.letters, more simplier
  end
end

我只能看到第一种方法的一个优点:在尝试重新定义常数时发出警告,但我认为这是罕见的情况。

1 个答案:

答案 0 :(得分:4)

每次调用方法Foo.letters时,您的第二种方法都会创建一个新数组。当然,这可以通过保存值来修复:

class Foo
  def self.letters
    @letters ||= [:a, :b, :c]
  end
end

此外,在使用每种方法继承此类时,行为会有一些变化(请参阅" How to use an overridden constant in an inheritanced class")

就个人而言,我不知道Foo.lettersFoo::LETTERS更简单 - 一个额外的角色?我认为常量应该用于常量,静态方法有自己的用例......