【问题标题】:Can I use methods instead of constants? [duplicate]我可以使用方法而不是常量吗? [复制]
【发布时间】:2014-05-18 11:18:40
【问题描述】:

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

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时都会创建一个新数组...
  • @UriAgassi 我认为您的评论可能是一个很好的答案。
  • 根据您当前的上下文,我认为第一种方法很好,如果您不打算在每次访问 LETTERS 时返回不同的数组对象。
  • 哦,当然@UriAgassi 是对的。我忘记了这么简单的事情:(

标签: ruby


【解决方案1】:

您的第二种方法在每次调用 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 更简单 - 一个额外的字符?我认为常量应该用于常量,并且静态方法有自己的用例......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2014-05-14
    • 2020-11-07
    • 1970-01-01
    • 2022-01-04
    • 2014-04-09
    • 2021-08-25
    相关资源
    最近更新 更多