覆盖运营商#prepend是否危险?

时间:2018-02-28 13:36:15

标签: ruby

我正在构建一个使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

0 个答案:

没有答案