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.

···

--
Posted via http://www.ruby-forum.com/.

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

···

On Sun, Oct 3, 2010 at 11:29 AM, Johan Soderholm <teisto@surfy.net> 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))

--
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

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,

···

2010/10/3 Johan Soderholm <teisto@surfy.net>:

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?

--
JJ Fleck
PCSI1 Lycée Kléber

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)

···

--
Posted via http://www.ruby-forum.com/\.

Alors! GTK ne parle pas français? <G>

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 Fleck <jeanjulien.fleck@gmail.com> wrote:

2010/10/3 Johan Soderholm <teisto@surfy.net>:

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?

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,

--
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

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 !

···

2010/10/4 Rick DeNatale <rick.denatale@gmail.com>:

Alors! GTK ne parle pas français? <G>

--
JJ Fleck
PCSI1 Lycée Kléber