我正在构建一个使ActiveRecord
不可变的宝石。细节无关紧要,但基本上,如果国家/地区的代码属性匹配,则允许user.country == :CAN
返回true
。
当然,这意味着:CAN == user.country
永远不会有效,除非我覆盖==
上的Symbol
运算符,我想知道这是否是一件危险的事情,可能是因为增加的开销,因为这个运算符广泛用于各地。
有没有更好/更聪明的方法来做到这一点? #coerce
不是一个选项,因为Symbol
已经知道如何==
。
Symbol.prepend(Module.new do
def ==(other)
if other.respond_to?(:immutable?) && other.immutable?
other.==(self)
else
super
end
end
end)
如果它发生任何变化,我的主要问题还与===
运算符有关,因为我想启用以下内容:
case user.country
when :CAN then ...
when :USA then ...
else ...
end