From: masa16.tanaka@... Date: 2018-04-26T01:17:14+00:00 Subject: [ruby-core:86686] [Ruby trunk Feature#14701] If the object is not frozen, I want to be able to redefine the compound assignment operator. Issue #14701 has been updated by masa16 (Masahiro Tanaka). Former NArray had add! method, but it results in a confused result. ~~~ ruby require 'narray' a = NArray.int(2,2).indgen! a[1,true] += 10 p a # => NArray.int(2,2): # [ [ 0, 11 ], # [ 2, 13 ] ] a = NArray.int(2,2).indgen! a[0,true].add!(10) p a # => NArray.int(2,2): # [ [ 0, 1 ], # [ 2, 3 ] ] ~~~ So I dismissed add! method of the current numo-narray. ---------------------------------------- Feature #14701: If the object is not frozen, I want to be able to redefine the compound assignment operator. https://bugs.ruby-lang.org/issues/14701#change-71646 * Author: naitoh (Jun NAITOH) * Status: Rejected * Priority: Normal * Assignee: * Target version: ---------------------------------------- If the object is not frozen, I want to be able to redefine the compound assignment operator (e.g. +=, -=, *=, /=, ..etc ). https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html * Redefinable operator (method) ~~~ | ^ & <=> == === =~ > >= < <= << >> + - * / % ** ~ +@ -@ [] []= ` ! != !~ ~~~ * use case ~~~ > require 'numo/narray' > a = Numo::Int32[5, 6] => Numo::Int32#shape=[2] [5, 6] > a.object_id => 70326927544920 > a += 1 => Numo::Int32#shape=[2] [6, 7] > a.object_id => 70326927530540 > a.inplace + 1 => Numo::Int32(view)#shape=[2] [7, 8] > a.object_id => 70326927530540 ~~~ With Numo::NArray, using "inplace" instead of "+=" will update the same object so it will be faster. I want to write "a += 1" instead of "a.inplace + 1". However, Ruby can not redefine "+=". -- https://bugs.ruby-lang.org/ Unsubscribe: