From: "David A. Black" Date: 2009-09-09T20:17:05+09:00 Subject: Re: How to get the return value from method of the super class? Hi -- On Wed, 9 Sep 2009, Josef Wolf wrote: > Hello, > > I am trying to override a method of a superclass within my derived class. > To do the real work, I need to call the original method of the superclass. > But when I try to get the return value of the super method, I only get > the object, not the return values I expected. Here's a code snippet to > demonstrate the problem, stripped from everything not related to the > problem: > > jw@raven> cat ./test.rb > #! /usr/bin/ruby > > require 'tk' > require 'pp' > > root = TkRoot.new { title "pcb.rb" } > > class TkDerivedCanvas < TkCanvas > def coords(tag, *args) > super(tag, args) > end > end > > orig = TkCanvas.new(:scrollregion=>[0,0,500,400]).pack() > derived = TkDerivedCanvas.new(:scrollregion=>[0,0,500,400]).pack() > > origrect = TkcRectangle.new(orig, [100,100], [300, 200], :fill=>"red") > derivedrect = TkcRectangle.new(derived, [100,100], [300, 200], :fill=>"red") > > pp orig.coords(origrect) > pp derived.coords(derivedrect) > > jw@raven> ./test.rb > [100.0, 100.0, 300.0, 200.0] > # > jw@raven> > > > Any ideas what I am doing wrong here? Yes; the syntax of your call to super is wrong. If you want to call super with the same arguments as the ones you got, just do: super with no argument list. Also, in general, if you want to call another method with the same arguments, you need to do: def m(*args) other(*args) # note the * end If you leave the * off of the call to other, you'll be sending a single argument (an array) instead of a list of arguments (the elements of the array). In the case of super you don't need to do that; just don't provide any argument list at all. (That's because super is a keyword, not a method, and has its own semantics.) David -- David A. Black / Ruby Power and Light, LLC / http://www.rubypal.com Ruby/Rails training, mentoring, consulting, code-review Latest book: The Well-Grounded Rubyist (http://www.manning.com/black2) September Ruby training in NJ has been POSTPONED. Details to follow.