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

hed*_*sky 1 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
Run Code Online (Sandbox Code Playgroud)

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

Uri*_*ssi 5

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

class Foo
  def self.letters
    @letters ||= [:a, :b, :c]
  end
end
Run Code Online (Sandbox Code Playgroud)

此外,使用每种方法继承这样的类时,行为也会发生一些变化(请参阅“如何在继承的类中使用重写的常量”)

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