From: Dominik Bathon Date: 2006-02-15T12:20:42+09:00 Subject: OP_ASGN1 and OP_ASGN2 allow calling of private operators and problem with splat Hi, irb(main):001:0> class Fixnum;private :*;end => Fixnum irb(main):002:0> 2*2 NoMethodError: private method `*' called for 2:Fixnum from (irb):2 from :0 irb(main):003:0> a=[1,2,3] => [1, 2, 3] irb(main):004:0> a[2]*=5 => 15 irb(main):005:0> a => [1, 2, 15] irb(main):006:0> class A;attr_accessor :a;end => nil irb(main):007:0> a=A.new => # irb(main):008:0> a.a=2 => 2 irb(main):009:0> a.a*=3 => 6 irb(main):010:0> a.a => 6 This is not really a problem, but I think it should be changed. A more serious problem is that splatting doesn't work as expected with OP_ASGN1: irb(main):001:0> class A; def method_missing(*a); p a; 1; end; end => nil irb(main):002:0> a=A.new => # irb(main):003:0> a[0,*[1,2,3]] [:[], 0, 1, 2, 3] => 1 irb(main):004:0> a[0,*[1,2,3]]=3 [:[]=, 0, 1, 2, 3, 3] => 3 irb(main):005:0> a[0,*[1,2,3]]+=3 [:[], [0, 1, 2, 3]] [:[]=, [0, 1, 2, 3], 4] => 4 For the last command I would expect: irb(main):005:0> a[0,*[1,2,3]]+=3 [:[], 0, 1, 2, 3] [:[]=, 0, 1, 2, 3, 4] => 4 (This is all in ruby 1.8.4) Dominik