Issue #9448 has been updated by Eric Wong.


 nobu / ruby-lang.org wrote:
 > Status changed from Open to Rejected
 > 
 > It's a spec.
 > An assignment returns the assigned value, not the value returned by the method.
 
 I think you misread, he is saying assignment returns the value returned
 by the method in trunk.  It looks like trunk is violating spec.
 I think it is r44551, opt_aset_str causing the bug.  Fix coming.

----------------------------------------
Bug #9448: Assignment with overridden []= returns return value of method rather than new value
https://bugs.ruby-lang.org/issues/9448#change-44587

* Author: Simon Eskildsen
* Status: Rejected
* Priority: Normal
* Assignee: 
* Category: 
* Target version: current: 2.2.0
* ruby -v: ruby 2.2.0dev
* Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
When calling []= the assignment will return the return value of the []= method, rather than the value of the right-hand side, which is the behaviour in 2.1.0-p0, 2.0.0-p353 and 1.9.3-p484.

Example code:

    class Animal                                                                                                                  
      def []=(key, new_value)                                                                                                      
        "walrus"                                                                                                                 
      end                                                                                                                          
    end                                                                                                                            
    animal = Animal.new                                                                                                               
    puts animal['current'] = "unicorn" 

In trunk, this returns 'walrus'. In other releases (tested in the ones mentioned above), this returns 'unicorn'.



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