我总是这样做来测试Ruby中的字符串相等性:
if mystring.eql?(yourstring)
puts "same"
else
puts "different"
end
这是在没有测试对象相等性的情况下执行此操作的正确方法吗?
我正在寻找最简洁的方法来根据内容测试字符串。
使用括号和问号,这看起来有点笨拙。
答案 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。