Re: Re: Ruby/Tk: How to access surrounding class from Tk Callback?
- From: u235321044@xxxxxxxxxxxxxxxxxxxxxxxxxxx (Ronald Fischer)
- Date: Wed, 01 Mar 2006 08:20:36 GMT
Hidetoshi NAGAI wrote:
From: u235321044@xxxxxxxxxxxxxxxxxxxxxxxxxxx (Ronald Fischer)
@root=TkRoot.new() { title "My Form" }
action_button=TkButton.new(@root) {
text "Action!"
command {
# Do something with @root and @foo
puts @root.foo # DOES NOT WORK
}
}
It may be a FAQ.
Arigatou gozaimasu! But where can I find the FAQ? I was able to
locate one only in Japanese, and my Japanese is barely sufficient
to order some Yakitori, let alone reading such a FAQ.... :-(
Aside from a FAQ, a Ruby/Tk reference manual might be handy. Right
now I am "learning" Ruby/Tk by looking at examples I find on the
net, and *guessing* how they could work - not a very satisfying
means to grasp a new language.
A block given to <TkWidget-class>.new method is
evaluated by <the widget>.instance_eval(<the block>).
That is, in the block, 'self' is the widget object.
So, @root in your button's command is an instance variable
of the button widget.
I understand.
To avoid it, you have to give attention to scope of variables.
For example,
------< example 1 >------------------------------------------
def initialize(...)
foo = @foo=1234
...
root = @root = TkRoot.new() { title "My Form" }
action_button=TkButton.new(@root) {
text "Action!"
command {
# use local variables
puts foo # same as @foo
puts root # same as @root
}
}
action_button.pack("side" => "right");
end
I amazed that this works, but I don't know how. foo is a local
variable inside initialize, isn't it? So it should go out of scope
as soon as initialize ends. How then can I refer to it from inside
my action command?
------< example 2 >------------------------------------------
def initialize(...)
@foo=1234
...
@root = TkRoot.new() { title "My Form" }
action_button=TkButton.new(@root,
:text=>"Action!",
:command=>proc{
puts @foo
puts @root
})
action_button.pack("side" => "right");
end
Here I have two questions: What is the meaning of the
colon in front of "command", and why can I access @root
now from inside command, but not in my original code?
------< example 3 >------------------------------------------
def initialize(...)
@foo=1234
...
@root = TkRoot.new() { title "My Form" }
cmd = proc{
puts @foo
puts @root
}
action_button=TkButton.new(@root) {
text "Action!"
command cmd
}
action_button.pack("side" => "right");
end
This looks clever too. From a design point of view, I like solution 2
best, because it avoids the need for additional variables. Still would
like to understand, *why* it works.
Ronald
--
Spam protected message from:
Sent by mn-pg-p-e-b-consultant-3.com from siemens in field com
Posted via http://www.usenet-replayer.com
.
- Follow-Ups:
- Re: Ruby/Tk: How to access surrounding class from Tk Callback?
- From: Hidetoshi NAGAI
- Re: Re: Re: Ruby/Tk: How to access surrounding class from Tk Callback?
- From: Ronald Fischer
- Re: Ruby/Tk: How to access surrounding class from Tk Callback?
- Prev by Date: Re: Possible Ruby-centric NASA SBIR area
- Next by Date: Re: Your Favorite One Liner
- Previous by thread: ASP.NET 2.0 vs Ruby On Rails
- Next by thread: Re: Re: Re: Ruby/Tk: How to access surrounding class from Tk Callback?
- Index(es):
Loading