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

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

马蒂亚斯

最佳答案

这会发生在每一种语言中,这样想吧

AreEqual(s, s.upcase())

vs.

AreEqual(s, s.upcase!())

在这两种情况下,upcase(!)函数必须在传递给AreEqual之前被调用,并且在upcase!()情况下,它实际上更改了s的值。upcase()返回一个带有大写版本s的新字符串。

10-08 04:50