使用常量代替返回这些常量的方法有什么意义吗?
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
我只能看到第一种方法的一个优点:在尝试重新定义常数时发出警告,但我认为这是罕见的情况。
答案 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.letters
比Foo::LETTERS
更简单 - 一个额外的角色?我认为常量应该用于常量,静态方法有自己的用例......