Object.object.method()

Hello, obviously it’s a time for a noobie question. What the following
statement means?

Object.object.method()

Sample code:

window = Gtk::Window.new(Gtk::Window::TOPLEVEL)
area = Gtk::DrawingArea.new()
area.window.set_cursor(Gdk::Cursor.new(Gdk::Cursor::PENCIL))

I’m confused. Can anyone enlight me?

Thanks.

On Sun, Oct 3, 2010 at 11:29 AM, Johan S. [email protected]
wrote:

Hello, obviously it’s a time for a noobie question. What the following
statement means?

Object.object.method()
Sample code:

window = Gtk::Window.new(Gtk::window::TOPLEVEL)
area = Gtk::DrawingArea.new()
area.window.set_cursor(Gdk::Cursor.new(Gdk::Cursor::PENCIL))

I assume you are talking about that last line.

area.window.set_cursor(dk::Cursor::PENCIL)

What that means is:

  1. send the message window to the object referenced by the variable
    area (which in the above code would be an instance of
    Gtk::DrawingArea. This will return a result object.

  2. send the result object which was returned in step 1 the message
    set_cursor with the argument dk::Cursor::PENCIL


Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Github: rubyredrick (Rick DeNatale) · GitHub
Twitter: @RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

2010/10/3 Johan S. [email protected]:

I’m confused. Can anyone enlight me?

To complete Rick’s answer, the “window” in the last line has
(normally) nothing to do with your window variable. Ruby sees that
you are trying to talk to the object “area” (because of the dot) so it
politely ask “area” if it has a method named “window” (which I assume
it has). You could try

fenetre = Gtk::Window.new(Gtk::window::TOPLEVEL)
area = Gtk::DrawingArea.new()
area.window.set_cursor(Gdk::Cursor.new(Gdk::Cursor::PENCIL))

it should still work (assuming you change all the other occurence of
variable “window” into “fenetre”)

On the contrary, the code

fenetre = Gtk::Window.new(Gtk::window::TOPLEVEL)
area = Gtk::DrawingArea.new()
area.fenetre.set_cursor(Gdk::Cursor.new(Gdk::Cursor::PENCIL))

should not work: ruby should complain with a “NoMethodError”

Cheers,

Rick Denatale wrote:

I assume you are talking about that last line.

area.window.set_cursor(dk::Cursor::PENCIL)

What that means is:

  1. send the message window to the object referenced by the variable
    area (which in the above code would be an instance of
    Gtk::DrawingArea. This will return a result object.

  2. send the result object which was returned in step 1 the message
    set_cursor with the argument dk::Cursor::PENCIL

Or to put it another way, it’s the same as this:

tmp = area.window
tmp.set_cursor(dk::Cursor::PENCIL)

Alors! GTK ne parle pas français?

And in Ruby 1.9 you could spell it properly as fenêtre, but it would
still cause a “No Method” error.

On Mon, Oct 4, 2010 at 5:49 AM, Jean-Julien F.
[email protected] wrote:

area.window.set_cursor(Gdk::Cursor.new(Gdk::Cursor::PENCIL))
area = Gtk::DrawingArea.new()

should not work: ruby should complain with a “NoMethodError”

Cheers,


JJ Fleck
PCSI1 Lycée Kléber


Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Github: rubyredrick (Rick DeNatale) · GitHub
Twitter: @RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

2010/10/4 Rick DeNatale [email protected]:

Alors! GTK ne parle pas français?

What a shame, isn’t it ? ;o)

I almost wrote Fenster to avoid the use of ê but for one my german is
not even close to what I was able to do in highshool (and I didn’t do
much at that time…) and secondly I thought that the use of the
uppercase (although autorised when defining a method) would be even
more misleading on that matter.

Cheers !