|
View:
New views
4 Messages
—
Rating Filter:
Alert me
|
|
|
super w/ implicit arguments in Ruby 1.9Hi--
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.9On 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.9On 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.9On 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. |
| Free embeddable forum powered by Nabble | Forum Help |