[#1582] [BUG] Regexp — sinara@...

原です。あけましておめでとうございます。

16 messages 1997/01/06

[#1705] 正規表現 単独の ? — Sinichiro Dezawa <dezawa@...>

出沢です

14 messages 1997/01/15

[#1771] rectangle of canvas widget — Noritugu Nakamura <nnakamur@...>

18 messages 1997/01/19

[#1788] Text of TkCanvas — Noritugu Nakamura <nnakamur@...>

28 messages 1997/01/20
[#1800] Re: Text of TkCanvas — matz@... (Yukihiro Matsumoto) 1997/01/21

まつもと ゆきひろです.

[#1802] Re: Text of TkCanvas — Noritugu Nakamura <nnakamur@...> 1997/01/21

[#1806] Re: Text of TkCanvas — matz@... (Yukihiro Matsumoto) 1997/01/22

まつもと ゆきひろです.

[#1816] Re: Text of TkCanvas — Noritugu Nakamura <nnakamur@...> 1997/01/22

[#1819] Re: Text of TkCanvas — matz@... (Yukihiro Matsumoto) 1997/01/22

まつもと ゆきひろです.

[#1865] ruby-1.0-960124 available — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

25 messages 1997/01/24
[#1878] Re: ruby-1.0-960124 available — WATANABE Hirofumi <watanabe@...> 1997/01/27

わたなべです.

[#1879] Re: ruby-1.0-960124 available — matz@... (Yukihiro Matsumoto) 1997/01/27

まつもと ゆきひろです.

[#1880] Re: ruby-1.0-960124 available — WATANABE Hirofumi <watanabe@...> 1997/01/27

わたなべです.

[#1890] Re: ruby-1.0-960124 available — matz@... (Yukihiro Matsumoto) 1997/01/27

まつもと ゆきひろです.

[#1926] [Dist] Mutex module — keiju@... (Keiju ISHITSUKA)

けいじゅ@SHLジャパンです.

81 messages 1997/01/28
[#1929] Re: [Dist] Mutex module — matz@... (Yukihiro Matsumoto) 1997/01/29

まつもと ゆきひろです.

[#1934] Re: [Dist] Mutex module 1997/01/29

けいじゅ@SHLジャパンです.

[#1935] Re: [Dist] Mutex module — matz@... (Yukihiro Matsumoto) 1997/01/29

まつもと ゆきひろです.

[#1938] Re: [Dist] Mutex module 1997/01/29

けいじゅ@SHLジャパンです.

[#1940] Re: [Dist] Mutex module — matz@... (Yukihiro Matsumoto) 1997/01/29

まつもと ゆきひろです.

[#1944] Re: [Dist] Mutex module 1997/01/29

けいじゅ@SHLジャパンです.

[#1947] Re: [Dist] Mutex module — matz@... (Yukihiro Matsumoto) 1997/01/29

まつもと ゆきひろです.

[#1960] Re: [Dist] Mutex module — sinara@... 1997/01/30

原です。

[#1969] Re: [Dist] Mutex module 1997/01/30

けいじゅ@SHLジャパンです.

[#1978] Re: [Dist] Mutex module — sinara@... 1997/01/30

原です。

[#1986] Re: [Dist] Mutex module 1997/01/30

けいじゅ@SHLジャパンです.

[#1989] Array as list/tupple (Re: [Dist] Mutex module) — matz@... (Yukihiro Matsumoto) 1997/01/31

まつもと ゆきひろです.

[#2008] [Request] static var? (Re: Array as list/tupple) — sinara@... 1997/01/31

原です。

[#1953] open (file descriptor) — j_kuro@... (Jun Kuroda)

黒田です.

16 messages 1997/01/29

[ruby-list:1840] Re: command option of Tk

From: matz@... (Yukihiro Matsumoto)
Date: 1997-01-23 03:43:27 UTC
List: ruby-list #1840
まつもと ゆきひろです.

In message "[ruby-list:1835] command option of Tk"
    on 97/01/23, Noritugu Nakamura <nnakamur@tamaru.kuee.kyoto-u.ac.jp> writes:
|中村です。

うーん,中村さん,いつ寝てるんですか? ゆうべ徹夜しちゃった
んでしょうか? 体壊さないでくださいね.

|とりあえず、こういうのを書きましたが
|どちらのボタンを押しても 2 しか出ません。
|
|#!/usr/local/bin/ruby
|
|require "tk"
|
|for i in 1..2
|  text = "button" + i
|  TkButton.new {
|	text text
|	command proc {
|	  print i, "\n"
|	  STDOUT.flush
|	}
|	pack
|  }
|end
|
|Tk.mainloop

以下のように書き換えてください.

for i in 1..2
  text = "button" + i
  TkButton.new {
    text text
    j = i               # ここが大事
    command proc {
      print j, "\n"     # iでなくjをつかう
      STDOUT.flush
    }
    pack
  }
end

この点はちょっと難しいので説明しましょう.

つまりtclでは文字列はその場で展開されてしまうため,-command 
で指定した$iの値はその時点の$iの値です.ところがrubyでは評価
は必ず実行時(ボタンが押された時)ですから,その時点のiの値(ルー
プの実行が終って2になっている)が表示されます.tclでいうと
"puts $i"でなく{puts $i}を指定した感じでしょうか.

望ましい処理はcommandを指定した時点でのiの値を保存しておくこ
とです.こういう時に動的変数を使います.動的変数(イテレータ
ブロックの中で最初に宣言された変数)はそのイテレータブロック
の範囲内だけがスコープになります.つまりループの1回目の実行
と2回目の実行で,iは同じもの(値も共有する)ですが,jは一度ス
コープを抜けて再度生成されたもので別々の値を持ちます.

Procが絡まない時には動的変数かどうかはほとんど違いがないので
すが,Procが関係すると(Procはそのスコープでの変数の値を保存
するので)結構ややこしくなります.難しければ,また質問してく
ださい.
                                まつもと ゆきひろ /:|)

In This Thread