super w/ implicit arguments in Ruby 1.9

View: New views
4 Messages — Rating Filter:   Alert me  

super w/ implicit arguments in Ruby 1.9

by trans :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi--

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

  6) 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.


Re: super w/ implicit arguments in Ruby 1.9

by Rob Biedenharn-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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

> Hi--
>
> Debugging a library for 1.9.1 compatibility. I get this error:
>
>  6) 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.
>


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 Biedenharn http://agileconsultingllc.com
Rob@...





Re: super w/ implicit arguments in Ruby 1.9

by trans :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message



On Nov 4, 11:13 am, Rob Biedenharn <R...@...>
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 ;)

Unfortunately now I get:

  3) 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?


Re: super w/ implicit arguments in Ruby 1.9

by trans :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message



On Nov 4, 12:04 pm, Intransition <transf...@...> wrote:

> On Nov 4, 11:13 am, Rob Biedenharn <R...@...>
> 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 ;)
>
> Unfortunately now I get:
>
>   3) 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?

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

Thanks for the help.