新井です。

>>> From: Koji Arai <JCA02266 / nifty.ne.jp>
>>> Date: 23 Apr 1999 00:40:09 +0900
>>> Subject: [ruby-ext:00168] [Ruby/Tk] callback_break

投稿した後に自己解決することはよくあることです(- -;
# 2日も悩んだのに…

> 新井です。

> 16進の入力だけを許す Entry Widget を作ろうと思い
> 以下のようなスクリプトを書きました。
> 
> #!/usr/local/bin/ruby
> 
> require "tk"
> 
> class TkEntryHex < TkEntry
>     def initialize(parent=nil, keys=nil)
> 	super
> 	
> 	self.bind 'KeyPress', proc {|c|
> 	    c = sprintf("%d", c) if Fixnum === c
> 
> 	    if String === c and /[0-9a-fA-F]/ !~ c
> 		callback_break
> 	    end
> 	}, '%A'
>     end
> end
> 
> TkEntryHex.new.pack
> Tk.mainloop
> __END__
> 

> 上記を実行して0-9a-f以外のキーを押すと callback_break で、
> 
> Error: /usr/local/lib/ruby/1.3/tk.rb:413:in `raise': wrong # of arguments(2 for 1)
> 
> とエラーになります。

クラス TkWindow でraiseが再定義されてたんですね。
早く気づけよ>自分

tk.rb の

> 412   def callback_break
> 413     raise TkCallbackBreak, "Tk callback returns 'break' status"
> 414   end

を

  def callback_break
    fail TkCallbackBreak, "Tk callback returns 'break' status"
  end

にしたらうまく行きました。が、これって私が、
callback_break の使い方を間違ってるんでしょうか?

# Ruby/Tkのクラス階層を把握するのが先だな