这里有几件事需要考虑:
最好的常量是那些没有真正改变软件更新的常量:
class ExampleClass
STATES = %i[
off
on
broken
].freeze
end
Run Code Online (Sandbox Code Playgroud)
通常,您在类中内部使用这些常量,并避免共享它们.当你分享它们时,你的使用方式受到限制.例如,如果引用了另一个类,则ExampleClass::STATES
无法在不更改其他代码的情况下更改该结构.
您可以通过提供接口使其更加抽象:
class ExampleClass
def self.states
STATES
end
end
Run Code Online (Sandbox Code Playgroud)
如果您将来更改该常量的结构,则可以始终保留旧行为:
class ExampleClass
STATES = {
on: 'On',
off: 'Off',
broken: 'Broken'
}.freeze
def self.states
STATES.keys
end
end
Run Code Online (Sandbox Code Playgroud)
当您谈论实例变量时,您指的是可以配置的内容:
class ConfigurableClass
INITIAL_STATE_DEFAULT = :off
def self.initial_state
@initial_state || INITIAL_STATE_DEFAULT
end
def self.initial_state=(value)
@initial_state = value ? value.to_sym
end
end
Run Code Online (Sandbox Code Playgroud)
常量是很好的,因为它们被定义一次并在过程的持续时间内使用,所以从技术上来说它们更快.实例变量仍然非常快,并且通常是必需的,如上所述.
归档时间: |
|
查看次数: |
1727 次 |
最近记录: |