Issue #14251 has been updated by duerst (Martin Drst).

Status changed from Open to Rejected

This behavior is expected. Except for purely functional programming languages, the difference between references and values is important to understand in every programming language, even if at first, it may be surprising.

----------------------------------------
Bug #14251: String insert changing value of other string
https://bugs.ruby-lang.org/issues/14251#change-69070

* Author: ricardovsilva (Ricardo Silva)
* Status: Rejected
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
~~~ ruby
foo = 'abc'
bar = foo
bar.insert(1, d)

puts foo 'adbc'
puts bar 'adbc'
~~~

The example above should only affect bar variable. It leads to an error by programmer.

A bypass that I found is to do:

~~~ ruby
foo = 'aaa'
bar = String.new foo
bar.insert(1, 'd')
puts foo #aaa
puts bar #adaa
~~~





-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>