【问题标题】:Ruby: the difference of "+=" and "<<"for String [duplicate]Ruby:字符串的“+=”和“<<”的区别[重复]
【发布时间】:2018-02-25 04:44:04
【问题描述】:
a = %W(a b c).each {|a| a << "\n"}
a.each {|a| print a}

展示:
一个
b
c

a = %W(a b c).each {|a| a += "\n"}
a.each {|a| print a}

显示:abc

造成这种差异的原因是什么?

【问题讨论】:

  • 到目前为止你做了哪些研究?你试过打印出a.inspect吗?

标签: ruby string


【解决方案1】:

注意&lt;&lt; 是一个就地 修饰符,也就是说它改变了字符串包含的内容。 += 是一个组合 addition-assignment 运算符,它改变变量指向的对象,但不改变原始对象。

比较:

a = "a"
a.object_id
# => ...4680

a += "b"
a.object_id
# => ...3960

a 现在指向一个完全不同的对象。当您在 each 循环中执行此操作时,您不会更改存储在数组中的原始对象,而是更改仅存在于该循环迭代范围内的变量。

更进一步:

a << "c"
a.object_id
# => ...3960

它仍然是同一个对象。字符串,像很多 container 类型的对象,如数组和散列,通常有一些方法可以进行就地修改,而另一些方法可以返回副本。 String#subString#sub! 之间存在巨大差异。

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2016-10-22
    • 2014-06-17
    相关资源
    最近更新 更多