Ruby如何比较字符串?

时间:2010-02-21 19:08:02

标签: ruby string comparison

也许有人知道以下行为的技术答案:

s = "hello world!"
s == s.upcase
# =>false, because "hello world!" != "HELLO WORLD!"
s == s.upcase!
#=>true, because s is changed before comparison?

的Mathias

2 个答案:

答案 0 :(得分:4)

这会发生在每种语言中,以这种方式来考虑

AreEqual(s, s.upcase())

vs.

AreEqual(s, s.upcase!())

在这两种情况下,upcase(!)函数在将其传递给AreEqual之前都要调用,而在upcase!()情况下,它实际上更改了值s upcase()返回带有大写版本s的 new 字符串。

答案 1 :(得分:4)

不要那样做。

如果未进行任何更改,

upcase!会返回已更新的字符串或nil,因此第一次之后该比较的结果将始终为false。但是这样依赖副作用语义是一个非常糟糕的主意。