最好的模式,以平等比较字符串/符号的平等?

dli*_*gat 6 ruby ruby-on-rails

是否存在一个惯用的Ruby模式来测试两个"字符串"的相等性,这与操作数是字符串还是符号无关?

我想使用一些运算符来执行此比较::abc == 'abc'.to_sym无需将操作数标准化为字符串或符号.

对于我正在寻找的那种东西,这种HashWithIndifferentAccess行为active_support是一个非常有用的类比.

Mat*_*att 4

如果你想在任何地方修补通用功能。

class Object
  def to_s_equals? var
    self.to_s == var
  end
end 
Run Code Online (Sandbox Code Playgroud)

如前所述,仅将符号转换为字符串,而不是将字符串转换为符号,除非您随后要使用该符号。你可以更具体,只在 Symbol 上这样做

或者,您可以为字符串和符号添加一些内容,但我想不出一个好的通用名称。

class Symbol
  def equals_string? var
    self.to_s == var
  end
end 

class String
  def equals_symbol? var
    self == var.to_s
  end
end
Run Code Online (Sandbox Code Playgroud)

即使这样也equals不太正确,但match推断出一个正则表达式。homologous或许?(结构上对应,但功能上不一定对应)

我认为你的叙述不够简洁to_s ==。也许可以稍微明确一下执行比较的顺序。