最简洁的方法来测试Ruby字符串或符号的字符串相等(不是对象相等)?

时间:2009-11-10 19:01:49

标签: ruby

我总是这样做来测试Ruby中的字符串相等性:

if mystring.eql?(yourstring)
 puts "same"
else
 puts "different"
end

这是在没有测试对象相等性的情况下执行此操作的正确方法吗?

我正在寻找最简洁的方法来根据内容测试字符串。

使用括号和问号,这看起来有点笨拙。

2 个答案:

答案 0 :(得分:128)

根据http://www.techotopia.com/index.php/Ruby_String_Concatenation_and_Comparison

执行任何一项

mystring == yourstring

mystring.eql? yourstring

是等效的。

答案 1 :(得分:13)

您的代码示例没有扩展您的主题的一部分,即符号,因此问题的一部分没有得到答复。

如果您有两个字符串,foo和bar,并且两者都可以是字符串或符号,则可以使用

测试相等性
foo.to_s == bar.to_s

跳过已知类型的操作数上的字符串转换效率更高一些。所以如果foo总是一个字符串

foo == bar.to_s

但效率提升几乎肯定不值得代表来电者进行任何额外的工作。

在Ruby 2.2之前,为了进行比较(使用字符串或符号),请避免实例化不受控制的输入字符串,因为符号不是垃圾收集的,因此您可以通过资源耗尽来打开拒绝服务。将符号的使用限制为您控制的值,即代码中的文字和受信任的配置属性。

Ruby 2.2 introduced garbage collection of symbols