Questions on the super method: Is the super method unique to MacRuby? super forwards the current message to the superclass with the same method name and arguments. Is there a way to send a message to the superclass method with different arguments either from within the subclass method of the same name or from outside the subclass method of the same name to bypass the subclass method? Thanks, Bob Rice
No it's not unique to MacRuby (Ruby and Obj-C support that feature) and yes you can pass other arguments :) - Matt Sent from my iPhone On Sep 7, 2010, at 12:16, Robert Rice <rice.audio@pobox.com> wrote:
Questions on the super method:
Is the super method unique to MacRuby?
super forwards the current message to the superclass with the same method name and arguments. Is there a way to send a message to the superclass method with different arguments either from within the subclass method of the same name or from outside the subclass method of the same name to bypass the subclass method?
Thanks, Bob Rice
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
Thanks Matt: I didn't see super in the ruby-doc.org/ruby-1.9/index.html unless super is short for superclass. Can I reach a superclass method without having the message go first to my subclass override of the method? Bob Rice On Sep 7, 2010, at 3:26 PM, Matt Aimonetti wrote:
No it's not unique to MacRuby (Ruby and Obj-C support that feature) and yes you can pass other arguments :)
- Matt
Sent from my iPhone
On Sep 7, 2010, at 12:16, Robert Rice <rice.audio@pobox.com> wrote:
Questions on the super method:
Is the super method unique to MacRuby?
super forwards the current message to the superclass with the same method name and arguments. Is there a way to send a message to the superclass method with different arguments either from within the subclass method of the same name or from outside the subclass method of the same name to bypass the subclass method?
Thanks, Bob Rice
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
On Sep 7, 2010, at 21:53 , Robert Rice wrote:
I didn't see super in the ruby-doc.org/ruby-1.9/index.html unless super is short for superclass.
In Ruby, super is not a real method call but a key word. Also, it does not behave exactly like a method call (implicit arguments/block and what not). Therefore it is not in the generated method list.
Can I reach a superclass method without having the message go first to my subclass override of the method?
Not as easily and general as in Smalltalk but you can do something like this: class Foo def foo 20 end end class Bar < Foo def foo super * 2 end end class Baz < Bar def foo method = Foo.instance_method(__method__).bind(self) method.call end end puts Foo.new.foo # => 20 puts Bar.new.foo # => 40 puts Baz.new.foo # => 20 Konstantin
Satish has a good blog post on the matter: http://rubylearning.com/satishtalim/ruby_overriding_methods.html You can certainly call super in your subclass before making any modifications or calling super based on a condition. I hope it helps, - Matt Sent from my iPhone On Sep 7, 2010, at 12:53, Robert Rice <rice.audio@pobox.com> wrote:
Thanks Matt:
I didn't see super in the ruby-doc.org/ruby-1.9/index.html unless super is short for superclass.
Can I reach a superclass method without having the message go first to my subclass override of the method?
Bob Rice
On Sep 7, 2010, at 3:26 PM, Matt Aimonetti wrote:
No it's not unique to MacRuby (Ruby and Obj-C support that feature) and yes you can pass other arguments :)
- Matt
Sent from my iPhone
On Sep 7, 2010, at 12:16, Robert Rice <rice.audio@pobox.com> wrote:
Questions on the super method:
Is the super method unique to MacRuby?
super forwards the current message to the superclass with the same method name and arguments. Is there a way to send a message to the superclass method with different arguments either from within the subclass method of the same name or from outside the subclass method of the same name to bypass the subclass method?
Thanks, Bob Rice
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
Thanks Matt: Good tutorial on super. Maybe someone could add a keyword section to ruby-doc. This leads me to a couple more questions on super and MacRuby inheritance: 1) Does MacRuby distinguish between Objective C subclasses and other Ruby classes or are all classes treated the same? 2) Can my inheritance path be arbitrarily long before I inherit from NSObject or an NS subclass? 3) If I have an empty init, e.g., def init; super; self; end Can I always delete the empty init and get the same result through inheritance? Bob Rice On Sep 7, 2010, at 4:13 PM, Matt Aimonetti wrote:
Satish has a good blog post on the matter: http://rubylearning.com/satishtalim/ruby_overriding_methods.html
You can certainly call super in your subclass before making any modifications or calling super based on a condition.
I hope it helps,
- Matt
Sent from my iPhone
On Sep 7, 2010, at 12:53, Robert Rice <rice.audio@pobox.com> wrote:
Thanks Matt:
I didn't see super in the ruby-doc.org/ruby-1.9/index.html unless super is short for superclass.
Can I reach a superclass method without having the message go first to my subclass override of the method?
Bob Rice
On Sep 7, 2010, at 3:26 PM, Matt Aimonetti wrote:
No it's not unique to MacRuby (Ruby and Obj-C support that feature) and yes you can pass other arguments :)
- Matt
Sent from my iPhone
On Sep 7, 2010, at 12:16, Robert Rice <rice.audio@pobox.com> wrote:
Questions on the super method:
Is the super method unique to MacRuby?
super forwards the current message to the superclass with the same method name and arguments. Is there a way to send a message to the superclass method with different arguments either from within the subclass method of the same name or from outside the subclass method of the same name to bypass the subclass method?
Thanks, Bob Rice
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
1) Does MacRuby distinguish between Objective C subclasses and other Ruby classes or are all classes treated the same? Not really but Cocoa classes expect to be returned self in the init process and the Cocoa convention is not to overwrite init but to create your own initializer using the initWith pattern. In Ruby, #initialize is often overwritten. 2) Can my inheritance path be arbitrarily long before I inherit from NSObject or an NS subclass? Yes, consider the following example:
class Foo; end; class Bar < Foo; end; class Baz < Bar; end; class Bob < Baz; end => nil Bob.ancestors => [Bob, Baz, Bar, Foo, NSObject, Kernel]
3) If I have an empty init, e.g., def init; super; self; end Can I always delete the empty init and get the same result through inheritance? I am not sure what you mean, sorry :( - Matt On Wed, Sep 8, 2010 at 8:50 AM, Robert Rice <rice.audio@pobox.com> wrote:
Thanks Matt:
Good tutorial on super. Maybe someone could add a keyword section to ruby-doc.
This leads me to a couple more questions on super and MacRuby inheritance:
1) Does MacRuby distinguish between Objective C subclasses and other Ruby classes or are all classes treated the same?
2) Can my inheritance path be arbitrarily long before I inherit from NSObject or an NS subclass?
3) If I have an empty init, e.g.,
def init; super; self; end
Can I always delete the empty init and get the same result through inheritance?
Bob Rice
On Sep 7, 2010, at 4:13 PM, Matt Aimonetti wrote:
Satish has a good blog post on the matter: http://rubylearning.com/satishtalim/ruby_overriding_methods.html
You can certainly call super in your subclass before making any modifications or calling super based on a condition.
I hope it helps,
- Matt
Sent from my iPhone
On Sep 7, 2010, at 12:53, Robert Rice <rice.audio@pobox.com> wrote:
Thanks Matt:
I didn't see super in the ruby-doc.org/ruby-1.9/index.html unless super is short for superclass.
Can I reach a superclass method without having the message go first to my subclass override of the method?
Bob Rice
On Sep 7, 2010, at 3:26 PM, Matt Aimonetti wrote:
No it's not unique to MacRuby (Ruby and Obj-C support that feature) and yes you can pass other arguments :)
- Matt
Sent from my iPhone
On Sep 7, 2010, at 12:16, Robert Rice <rice.audio@pobox.com> wrote:
Questions on the super method:
Is the super method unique to MacRuby?
super forwards the current message to the superclass with the same method name and arguments. Is there a way to send a message to the superclass method with different arguments either from within the subclass method of the same name or from outside the subclass method of the same name to bypass the subclass method?
Thanks, Bob Rice
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
On 8 Sep 2010, at 17:22, Matt Aimonetti wrote:
3) If I have an empty init, e.g., def init; super; self; end Can I always delete the empty init and get the same result through inheritance?
Yes. Ruby will look for the method in your subclass, then go up the class hierarchy to the superclass and check there for the method there, calling it if it's found. So a method that just contains 'super' [although not 'super()' as that calls super with no arguments] is doing the same job as the method not being defined in the subclass. C --- Caius Durling caius@caius.name +44 (0) 7960 268 100 http://caius.name/
Here is an example: http://macruby.labs.oreilly.com/ch01.html#_class - Matt On Wed, Sep 8, 2010 at 10:52 AM, Robert Rice <rice.audio@pobox.com> wrote:
Thanks Matt:
I don't think I've seen any examples using the initWith method. Is that method called after init?
Bob Rice
On Sep 8, 2010, at 12:22 PM, Matt Aimonetti wrote:
initWith
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
3) If I have an empty init, e.g.,
def init; super; self; end
Can I always delete the empty init and get the same result through inheritance?
Yes, you can omit the #init declaration in this case, it works like a charm, because every Obj-C object (and thus every MacRuby object) inherits from NSObject, that has its own -init method. What this means is if you don't define yours, calling -init on your object will call NSObject's -init, just like in Obj-C :-) class Hello def world puts "Hello world!" end end Hello.alloc.init.world
I don't think I've seen any examples using the initWith method. Is that method called after init?
Simply something of the like: - (id)initWithDelegate:(id)someDelegate { [self setDelegate:someDelegate]; } or - (id)initWithColor:(MRColor)color andBorderSize:(int)borderSize { [self setCubeColor:color]; [self setBorderSize:borderSize]; } Hope this helped :-) -- Thibault Martin-Lagardette On Sep 8, 2010, at 09:22, Matt Aimonetti wrote:
1) Does MacRuby distinguish between Objective C subclasses and other Ruby classes or are all classes treated the same? Not really but Cocoa classes expect to be returned self in the init process and the Cocoa convention is not to overwrite init but to create your own initializer using the initWith pattern. In Ruby, #initialize is often overwritten.
2) Can my inheritance path be arbitrarily long before I inherit from NSObject or an NS subclass? Yes, consider the following example:
class Foo; end; class Bar < Foo; end; class Baz < Bar; end; class Bob < Baz; end => nil Bob.ancestors => [Bob, Baz, Bar, Foo, NSObject, Kernel]
3) If I have an empty init, e.g., def init; super; self; end Can I always delete the empty init and get the same result through inheritance?
I am not sure what you mean, sorry :(
- Matt
On Wed, Sep 8, 2010 at 8:50 AM, Robert Rice <rice.audio@pobox.com> wrote: Thanks Matt:
Good tutorial on super. Maybe someone could add a keyword section to ruby-doc.
This leads me to a couple more questions on super and MacRuby inheritance:
1) Does MacRuby distinguish between Objective C subclasses and other Ruby classes or are all classes treated the same?
2) Can my inheritance path be arbitrarily long before I inherit from NSObject or an NS subclass?
3) If I have an empty init, e.g.,
def init; super; self; end
Can I always delete the empty init and get the same result through inheritance?
Bob Rice
On Sep 7, 2010, at 4:13 PM, Matt Aimonetti wrote:
Satish has a good blog post on the matter: http://rubylearning.com/satishtalim/ruby_overriding_methods.html
You can certainly call super in your subclass before making any modifications or calling super based on a condition.
I hope it helps,
- Matt
Sent from my iPhone
On Sep 7, 2010, at 12:53, Robert Rice <rice.audio@pobox.com> wrote:
Thanks Matt:
I didn't see super in the ruby-doc.org/ruby-1.9/index.html unless super is short for superclass.
Can I reach a superclass method without having the message go first to my subclass override of the method?
Bob Rice
On Sep 7, 2010, at 3:26 PM, Matt Aimonetti wrote:
No it's not unique to MacRuby (Ruby and Obj-C support that feature) and yes you can pass other arguments :)
- Matt
Sent from my iPhone
On Sep 7, 2010, at 12:16, Robert Rice <rice.audio@pobox.com> wrote:
Questions on the super method:
Is the super method unique to MacRuby?
super forwards the current message to the superclass with the same method name and arguments. Is there a way to send a message to the superclass method with different arguments either from within the subclass method of the same name or from outside the subclass method of the same name to bypass the subclass method?
Thanks, Bob Rice
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
participants (5)
-
Caius Durling
-
Konstantin Haase
-
Matt Aimonetti
-
Robert Rice
-
Thibault Martin-Lagardette