[#68478] Looking for MRI projects for Ruby Google Summer of Code 2015 — Tony Arcieri <bascule@...>

Hi ruby-core,

10 messages 2015/03/10

[ruby-core:68615] [Ruby trunk - Bug #10997] [Rejected] String in Hash 'prepend', '<<' bug

From: nobu@...
Date: 2015-03-23 14:01:11 UTC
List: ruby-core #68615
Issue #10997 has been updated by Nobuyoshi Nakada.

Description updated
Status changed from Open to Rejected

`Hash#clone` does not clone the elements, so the value is shared.
In the last example, you assign different object.

----------------------------------------
Bug #10997: String in Hash 'prepend', '<<' bug
https://bugs.ruby-lang.org/issues/10997#change-51921

* Author: Johan Kim
* Status: Rejected
* Priority: Normal
* Assignee: Yukihiro Matsumoto
* ruby -v: ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-darwin14]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
i used with Rails console

**Only String is great**

```ruby
original = "a" #=> "a"
clone = original.clone #=> "a"
clone.prepend("prepend_") #=> "prepend_a"
clone #=> "prepend_a"
original #=> "a"
```
**but String in Hash then get some issue**

```ruby
original = { a: "a" } #=> {:a=>"a"}
clone = original.clone #=> {:a=>"a"}
clone[:a].prepend("prepend_") #=> "prepend_a"
clone #=> {:a=>"prepend_a"}
original #=> {:a=>"prepend_a"}
```
i expect `original` to `{:a=>"a"}`
**and when you use literal then works**

```ruby
original = { a: "a" } #=> {:a=>"a"}
clone = original.clone #=> {:a=>"a"}
clone[:a] = "prepend_#{clone[:a]}" #=> "prepend_a"
clone #=> {:a=>"prepend_a"}
original #=> {:a=>"a"}
```

`<<` has same issue too.




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

In This Thread

Prev Next