From: ts Date: 2002-05-03T02:28:30+09:00 Subject: Re: Scope of Singleton Classes >>>>> "J" == Jason Voegele writes: J> def method_missing(operation, *args) J> op = lookup_operation(klass, operation) # slow J> class << self J> define_method(operation, args) do |*opargs| J> send_iiop_request(...) J> end J> end J> end There is a stupid way to write it in 1.7.2, small problem with 1.6.7 pigeon% cat b.rb #!/usr/bin/ruby class ObjectProxy def self.defin(operation) define_method(operation) do |x| forward(operation, x) end end def method_missing(operation, *args) p "method_missing #{operation}" class << self; self end.send(:defin, operation) send(operation, *args) end def forward(operation, *args) p "forward #{operation} -- #{args.inspect}" end end obj = ObjectProxy.new obj.foo obj.foo(12) obj.bar obj.foo(12, 24) obj.bar(36) ObjectProxy.new.foo('a') pigeon% pigeon% b.rb "method_missing foo" ./b.rb:11:in `send': undefined method `defin' for ObjectProxy:Class (NameError) from ./b.rb:11:in `method_missing' from ./b.rb:21 pigeon% pigeon% ./ruby b.rb "method_missing foo" "forward foo -- [nil]" "forward foo -- [12]" "method_missing bar" "forward bar -- [nil]" "forward foo -- [[12, 24]]" "forward bar -- [36]" "method_missing foo" "forward foo -- [\"a\"]" pigeon% Guy Decoux