我总是这样做来测试Ruby中的字符串相等性:
if mystring.eql?(yourstring)
puts "same"
else
puts "different"
end
这是不测试对象相等性的正确方法吗?
我正在寻找一种最简单的方法来根据其内容测试字符串。
带有括号和问号,这似乎有些笨拙。
我总是这样做来测试Ruby中的字符串相等性:
if mystring.eql?(yourstring)
puts "same"
else
puts "different"
end
这是不测试对象相等性的正确方法吗?
我正在寻找一种最简单的方法来根据其内容测试字符串。
带有括号和问号,这似乎有些笨拙。
Answers:
根据http://www.techotopia.com/index.php/Ruby_String_Concatenation_and_Comparison
要么做
mystring == yourstring
要么
mystring.eql? yourstring
是等效的。
您的代码示例并未扩展您的主题的一部分,即符号,因此该问题的一部分没有得到解答。
如果您有两个字符串foo和bar,并且都可以是字符串或符号,则可以使用
foo.to_s == bar.to_s
跳过具有已知类型的操作数上的字符串转换会更有效率。因此,如果foo始终是字符串
foo == bar.to_s
但是,效率提高几乎绝对不值得代表呼叫者要求任何额外的工作。
在Ruby 2.2之前的版本中,请避免为比较目的而使用非受控输入字符串(使用字符串或符号),因为符号不会被垃圾收集,因此您可以通过资源耗尽来拒绝服务。将符号的使用限制为您控制的值,即代码中的文字和受信任的配置属性。
Ruby 2.2引入了符号的垃圾回收。
foo.intern == bar.intern
会更好-嵌入字符串平均比从符号创建字符串更有效。(如果给定的字符串先前已被预先锁定,则只返回该符号。)