0
a = %W(a b c).each {|a| a << "\n"}
a.each {|a| print a}
显示器的区别:
一个
b
Ç红宝石: “+ =” 和 “<<” 弦乐
a = %W(a b c).each {|a| a += "\n"}
a.each {|a| print a}
dispays:ABC
其原因是什么区别?
a = %W(a b c).each {|a| a << "\n"}
a.each {|a| print a}
显示器的区别:
一个
b
Ç红宝石: “+ =” 和 “<<” 弦乐
a = %W(a b c).each {|a| a += "\n"}
a.each {|a| print a}
dispays:ABC
其原因是什么区别?
请注意,<<
是一个in-place修饰符,即它改变了字符串包含的内容。 +=
是组合加法赋值运算符,用于更改变量指向的内容,但不会更改原始对象。
比较:
a = "a"
a.object_id
# => ...4680
a += "b"
a.object_id
# => ...3960
a
现在指向一个完全不同的对象。当您在each
循环中执行此操作时,您不会更改存储在数组中的原始对象,而是正在改变仅存在于该循环迭代范围内的变量。
往前一步:
a << "c"
a.object_id
# => ...3960
它仍然是同一个对象。字符串,像很多容器类型的对象,如数组和哈希,通常有一些方法可以进行就地修改,其他方法可以返回副本。 String#sub
和String#sub!
之间有很大的差异。
你到目前为止做了哪些研究?你有没有试过打印'a.inspect'? –