>> 古い記事: 現在表示しているページのすべての pre 要素に google-code-prettify を適用するブックマークレット(Firefox向け)
<< 新しい記事: Ren'Py: メニュー表示+表示位置指定

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Ruby/Tk: command に渡すブロック内でインスタンス変数・インスタンスメソッドを使う

仕組みがよく分かっていないのですが、下記の @button2, @button4 のように ボタンのインスタンスを生成した後でブロックを登録すると期待通りの動作をしてくれました。


require "tk"

class MyApp
  def foo_method
    puts "instance method"
  end

  def initialize
    @foo = "instance variable"
    
    @button1 = TkButton.new {
      text "puts instance variable 1"
      command {
        puts @foo #=> nil
      }
      pack
    }
    
    @button2 = TkButton.new {
      text "puts instance variable 2"
      pack
    }
    @button2.command { # ★
      puts @foo #=> instance variable
    }
    
    @button3 = TkButton.new {
      text "call instance method 1"
      command proc{ 
        foo_method()
        #=> NoMethodError: undefined method `foo_method' for #<TkButton:0xb6f8f8ac @cmdtbl=["c00003"], @path=".w00002">
      }
      pack
    }
    
    @button4 = TkButton.new {
      text "call instance method 2"
      pack
    }
    @button4.command { # ★
      foo_method() #=> instance method
    }
  end
end

app = MyApp.new()

Tk.mainloop

>> 古い記事: 現在表示しているページのすべての pre 要素に google-code-prettify を適用するブックマークレット(Firefox向け)
<< 新しい記事: Ren'Py: メニュー表示+表示位置指定
** ホームに戻る

コメント

コメントの投稿

管理者にだけ表示を許可する

|
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。