>> Maybe it has something to do with method_missing. I suspect object es >> has a private method #y which requires one argument. This is the one >> es.send(:y) calls (as it can call private methods). However when you >> call the method as just es.y, it is not found and method_missing is >> called which happens to handle y as a method with no arguments. Wow Peter, nice one to figure that out! > Ah yes!!! That seems to be the case. > > It also seems to be a reasonable workaround for me. > > >> es.send(:method_missing,:y) > => 30.468257171342 > >> ------------------------------------------- class A def b puts "this is b!" end private :b def method_missing name puts "this is method missing: #{name}" end end a = A.new a.b a.send(:b) eval "a.#{:b.to_s}" ------------------------------------------- output: this is method missing: b this is b! this is method missing: b ------------------------------------------- I would resort to eval in this case, rather than relying on implementation details. (but its slower, for sure) cheers Simon