[#39989] TCPSocket.new でスレッドが止まる。 — take_tk <ggb03124@...>

たけ(tk)です。

15 messages 2004/09/02

[#40018] yaml.rbとdate.rbを組み合わせて使った際の問題 — "Keisuke Minami" <keisuke@...>

こんにちは。三並と申します。

14 messages 2004/09/07
[#40020] Re: yaml.rbとdate.rbを組み合わせて使った際の問題 — IWATSUKI Hiroyuki <don@...> 2004/09/07

岩月と申します。

[ruby-list:39988] Re: ruby/tk のイベントハンドラをまとめて設定するには?

From: nobu@...
Date: 2004-09-02 00:17:56 UTC
List: ruby-list #39988
なかだです。

At Wed, 1 Sep 2004 20:43:13 +0900,
H.Yamamoto wrote in [ruby-list:39984]:
> ところが、コメントを外すと(つまり、外側のスコープに同名の変数があると)常に 3 しか
> 表示しなくなります。理由は http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Proc
> でわかったのですが、Ruby2 では r はブロックローカルでなくなると聞いたので、コメントを
> 外さなくても常に 3 が表示されるようになると思います。
> 
> Javaだと
> 
> for (int i = 0; i < 3; ++i) {
>   final Rectangle r = .....
>   ....addActionListener(new ActionListener(){
>     public void actionPerformed() {
>       print r.toString();
>     }
>   }
> }
> 
> とすれば、ループごとの r が actionPerformed にバインドされるのですが、ruby で将来にわたって
> 安全なやりかたというのは、どういった形になりますか?

逆に、ブロック引数は外側のスコープに同名の変数があっても常にブ
ロックローカルになる予定です。

  module Kernel
    def let(*values)
      yield(*values)
    end
  end

  require "tk"

  TkCanvas.new {
    3.times {|i|
      h = i * 50
      let(TkcRectangle.new(self, 100 + h, 100 + h, 200 + h, 200 + h, :fill => :white)) {|r|
        r.bind "ButtonPress-1", proc { p r.id }
      }
    }
    pack
  }

  Tk.mainloop

個人的には、こういうのもどうかなと思ってるんですが、多値がArray
から分離されるとちょっと使いづらいかも。

  module Kernel
    def as
      yield(self)
    end
  end

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread