[#39984] ruby/tk のイベントハンドラをまとめて設定するには? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
9 messages
2004/09/01
[#39989] TCPSocket.new でスレッドが止まる。 — take_tk <ggb03124@...>
たけ(tk)です。
15 messages
2004/09/02
[#39992] Re: TCPSocket.new でスレッドが止まる。
— nobu@...
2004/09/02
なかだです。
[#39993] Re: TCPSocket.new でスレッドが止まる。
— take_tk <ggb03124@...>
2004/09/02
たけ(tk)です
[#39996] Re: TCPSocket.new でスレッドが止まる。
— Yukihiro Matsumoto <matz@...>
2004/09/02
まつもと ゆきひろです
[#40013] ruby/tkについて — skoba@... (KOBAYASHI Satoshi)
小林@島根大学です。
5 messages
2004/09/07
[#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
岩月と申します。
[#40022] Re: yaml.rbとdate.rbを組み合わせて使った際の問題
— nobu@...
2004/09/07
なかだです。
[#40028] Re: yaml.rbとdate.rbを組み合わせて使った際の問題
— Yukihiro Matsumoto <matz@...>
2004/09/07
まつもと ゆきひろです
[#40033] Re: yaml.rbとdate.rbを組み合わせて使った際の問題
— nobu@...
2004/09/08
なかだです。
[#40035] Re: yaml.rbとdate.rbを組み合わせて使った際の問題
— Yukihiro Matsumoto <matz@...>
2004/09/08
まつもと ゆきひろです
[#40021] 動的なクラス名 — "fuji@..." <fuji@...>
藤岡です。
9 messages
2004/09/07
[#40056] Ruby本読書会 — MoonWolf <moonwolf@...>
MoonWolfです。
7 messages
2004/09/18
[ruby-list:40002] Re: ruby/tk のイベントハンドラをまとめて設定するには?
From:
Yukihiro Matsumoto <matz@...>
Date:
2004-09-03 04:57:26 UTC
List:
ruby-list #40002
まつもと ゆきひろです
In message "Re: [ruby-list:40001] Re: ruby/tk のイベントハンドラをまとめて設定するには?"
on Fri, 3 Sep 2004 12:06:51 +0900, H.Yamamoto <ocean@m2.ccsnet.ne.jp> writes:
|>> let(TkcRectangle.new(self, 100 + h, 100 + h, 200 + h, 200 + h, :fill => :white)) {|r|
|>> r.bind "ButtonPress-1", proc { p r.id }
|>> }
|
|色々考えたんですが、しっくりくるものがなくて、難しいです。
|
| 1. let を予約語にしてしまう
|
| r = TkcRectangle.new(self, 100 + h, 100 + h, 200 + h, 200 + h, :fill => :white)
| let r
| r.bind "ButtonPress-1", proc { p r.id }
| end
|
| r = TkcRectangle.new(self, 100 + h, 100 + h, 200 + h, 200 + h, :fill => :white)
| r.bind "ButtonPress-1", let r { proc { p r.id } }
私が考えているのはこんな感じです。
let {|r|
r = TkcRectangle.new(self, 100 + h, 100 + h, 200 + h, 200 + h, :fill => :white)
r.bind "ButtonPress-1", proc { p r.id }
}
| 2. ブロックローカルにするような宣言をつくる
|
| r = TkcRectangle.new(self, 100 + h, 100 + h, 200 + h, 200 + h, :fill => :white)
| r.bind "ButtonPress-1", proc { p `r.id }
これは「`」がブロックローカルマークですか? 残念ながらその記
号は使われています。ブロックローカル変数には別のprefixを使う
というのはなかなか魅力的なアイディアですが、もう記号が残って
いないような気がします。「\」は使ってないけど...。
それに特別な記号を使う場合にはそのままではネストに対応できま
せんね。一つ上の外側のネストのブロックローカル変数に対応する
場合には「\\foo」とかするのは避けたいです。
| r = TkcRectangle.new(self, 100 + h, 100 + h, 200 + h, 200 + h, :fill => :white)
| r.bind "ButtonPress-1", proc with r do p r.id end
こちらはブロックパラメータ中ににローカル宣言を付加するもので
すね。以前出たものでは||の中に
loop{|a; b,c,d|...}
で「aはブロックパラメータ(ブロックローカル)」かつ「b,c,dは
ブロックローカル」という案がありました。結局、そんなことしな
くても
loop{|a| let{|b,c,d|...}}
でいいじゃん、という気になって採用していませんが。
| r = TkcRectangle.new(self, 100 + h, 100 + h, 200 + h, 200 + h, :fill => :white)
| r.bind "ButtonPress-1", proc r->{ p r.id }
えーと、Perl6風味ですね。ブロックローカル変数について検討し
ていた時にはこれは考えていなかったのですが、単純に考えると
(Perl6同様)「r」は単なるブロックローカルというよりもブロック
パラメータになるのではないかと思います。
|なんて書きましたが、ブロック引数もブロックローカルでないのが一番わかりやすいような
|気もしてきて、よくわかりません。
その辺は私に任せてくださったほうがよいかもしれません。
まつもと ゆきひろ /:|)