反向与反向!在Ruby中比较回文

时间:2015-02-28 05:39:03

标签: ruby string

我知道 反向 会创建一个新字符串,其中字符串的字符反向且 反向! 将当前字符串变异(反转)到位。我的问题是,为什么,当例如测试回文时,会发生这种情况?:

a = "foobar"
a == a.reverse    # => false
a == a.reverse!   # => true

是因为它与内存中的对象相同,因此==只检查它们是否具有相同的内存位置?

谢谢!

4 个答案:

答案 0 :(得分:7)

String#reverse!方法返回调用它的字符串

a == a.reverse!

与说

相同
a.reverse!
a == a

当然a == a是真的。

请注意,至少reverse!对字符串的作用并不重要,==中对o == o.m重要的是方法(m )返回。

答案 1 :(得分:4)

a == a.reverse!   # => true

是因为a.reverse!在比较之前执行了。

a.reverse!执行内部字符串反转。完成此操作后,a成为一个包含raboof的字符串。由于String#reverse!返回了返回的结果,因此raboof已经通过调用a#reverse!更改了raboof左侧的字符串{reverse!正在使用#eql?对正在呼叫true)的右侧进行比较,结果为{{1}}。

希望它有所帮助。

答案 2 :(得分:0)

您可以对object_id进行检查,以确保(bang)覆盖自己。

 > a.object_id
 => 64561940 

 > a.reverse.object_id
 => 61943060 

 > a.reverse!.object_id
 => 64561940 

答案 3 :(得分:-1)

由于String#reverse!更改了a变量的值,但String#reverse返回了没有更改a变量的新值。