2009-11-12 2 views
3

그래서 나는이 응용 프로그램을Ruby + Tk 명령 바인딩 - 범위 문제?

require 'tk' 
class Foo 
    def my_fancy_function 
    puts "hello, world!" 
    end 

    def initialize 
    @root = TkRoot.new{title "Hello, world!"} 
    frame = TkFrame.new 
    my_fancy_button = TkButton.new(frame) do 
     text "Press meee" 
     command {my_fancy_function} 
     pack 
    end 
    frame.pack 
    Tk.mainloop 
    end 
end 

bar = Foo.new 

을하지만이 버튼을 누르면, 내가 얻을 "나가서 설명하자면 NameError : 정의되지 않은 지역 변수 또는 메소드`my_fancy_function를 '# < TkButton을 위해 ..."난

꽤 범위와 관련된 사소한 것이 빠졌음을 확신합니다 ... 버튼에 명령을 올바르게 바인딩하려면 어떻게해야합니까?

편집 : 매개 변수 내 my_fancy_button 블록을 변경하면 좋아, 즉

my_fancy_button = TkButton.new(frame, :text => "Press meee", :command => proc{my_fancy_function}).pack 

그런 다음 그것을 작동합니다. 하지만 왜?

+0

사람과 다른 것을 찾을거야? 아무도?... – KTamas

답변

4

당신이 코드의 do ... end 블록하는 int

p self 

를 넣어 경우, 그때는 아마 현재 범위가 Foo 객체