Super w/ implicit arguments in Ruby 1.9

Hi–

Debugging a library for 1.9.1 compatibility. I get this error:

  1. Error:
    test_02_002(TC_Inheritor_02):
    RuntimeError: implicit argument passing of super from method defined
    by define_method() is not supported. Specify all arguments
    explicitly.

The offending code is:

  define_method( key ) do
    defined?(super) ? super.__send__(op,obj) : obj.dup
  end

So I’m confused since I am not calling super without arguments, though
I am asking if it is defined. But #defined? works in a special way so
as not to actually invoke it’s argument, right? Or is it something to
with send? What is amiss here?

Thanks.

On Nov 4, 2009, at 10:39 AM, Intransition wrote:

The offending code is:
Thanks.

read the line like the parser will:

defined?(super) ? (super).send((op),(obj)) : (obj).dup

the object that gets send is the return value of super. Can you
try:
defined?(super) ? super().send(op,obj) : obj.dup
so that the implicit args of super aren’t an issue? (because you
explicitly give an empty arg list)

-Rob

Rob B. http://agileconsultingllc.com
[email protected]

On Nov 4, 11:13 am, Rob B. [email protected]
wrote:

read the line like the parser will:

defined?(super) ? (super).send((op),(obj)) : (obj).dup

the object that gets send is the return value of super. Can you
try:
defined?(super) ? super().send(op,obj) : obj.dup
so that the implicit args of super aren’t an issue? (because you
explicitly give an empty arg list)

Doh. I should have seen that. Thank you for helping my poor little
overtaxed brain :wink:

Unfortunately now I get:

  1. Error:
    test_02_002(TC_Inheritor_02):
    NoMethodError: super: no superclass method koko' for TC_Inheritor_02::C:Class /mnt/repos/rubyworks/facets/lib/more/facets/inheritor.rb:70:in block (2 levels) in inheritor’
    /mnt/repos/rubyworks/facets/test/more/test_inheritor.rb:31:in
    `test_02_002’

Does defined?(super) not work in 1.9? If so, how does one work around?

On Nov 4, 12:04 pm, Intransition [email protected] wrote:

so that the implicit args of super aren’t an issue? (because you
TC_Inheritor_02::C:Class
/mnt/repos/rubyworks/facets/lib/more/facets/inheritor.rb:70:in
block (2 levels) in inheritor' /mnt/repos/rubyworks/facets/test/more/test_inheritor.rb:31:in test_02_002’

Does defined?(super) not work in 1.9? If so, how does one work around?

No, it works. I checked. So it’s something else.

Thanks for the help.