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

Ruby 我可以使用方法而不是常量吗?,ruby,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 我只看到第一种方法的一个优点:在尝试重新定义常量时发出警告,但我认为这种情

使用常量而不是像这样返回这些常量的方法有什么意义吗

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

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

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

class Foo
  def self.letters
    @letters ||= [:a, :b, :c]
  end
end
此外,在使用每种方法继承此类类时,行为也会发生一些变化(请参见“”)


就我个人而言,我不认为
Foo.letters
Foo::letters
更简单-一个额外的字符?我认为常量应该用于常量,静态方法有自己的用例……

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

class Foo
  def self.letters
    @letters ||= [:a, :b, :c]
  end
end
此外,在使用每种方法继承此类类时,行为也会发生一些变化(请参见“”)


就我个人而言,我不认为
Foo.letters
Foo::letters
更简单-一个额外的字符?我认为常量应该用于常量,静态方法有自己的用例……

第二种方法在每次调用
Foo.letters
…@urigassi时都会创建一个新数组。我认为您的评论可能是一个很好的答案。根据您当前的上下文,我认为第一种方法很好,如果您不想在每次访问
字母时返回不同的数组对象,那么@urigassi当然是对的。我忘了这么简单的一件事:(第二种方法每次调用
Foo.letters
。@UriAgassi您的评论可能是一个很好的答案,我认为。根据您当前的上下文,我认为第一种方法很好,如果您不想在每次访问
letters
时返回不同的数组对象的话。哦,当然@UriAgassi是对的。我忘记了这很简单:(