ruby-reference-manual:260
From: okkez <okkez000@g...>
Date: Thu, 4 Jan 2007 21:42:38 +0900
Subject: [ruby-reference-manual:260] TclTkIpの特異メソッドとinstance_eval
okkezです。 # tk.rb 色々と難しいです。 ちょっと、どう書くべきか悩んでいる部分があるので相談させてください。 ちょっと長いですがソースコードを一部引用します。 以下のような感じで、instance_eval内でクラスメソッドとインスタンスメソッドが定義されています。 この場合は、どこにどう書けばいいでしょうか。 また、その直後で def INTERP.hogehoge というパターンで特異メソッドの追加が続いているのですが、こちらは普通にTclTkIpクラスの特異メソッドとして記述しておけばいいのでしょうか。 == Singleton Methods --- cb_entry_class みたいな感じです。 ---- tk.rb ---- module TkCore include TkComm extend TkComm unless self.const_defined? :INTERP if self.const_defined? :IP_NAME name = IP_NAME.to_s else #name = nil name = $0 end if self.const_defined? :IP_OPTS if IP_OPTS.kind_of?(Hash) opts = hash_kv(IP_OPTS).join(' ') else opts = IP_OPTS.to_s end else opts = '' end INTERP = TclTkIp.new(name, opts) def INTERP.__getip self end INTERP.instance_eval{ @tk_cmd_tbl = {}.taint def @tk_cmd_tbl.[]=(idx,val) if self.has_key?(idx) && Thread.current.group != ThreadGroup::Default fail SecurityError,"cannot change the entried command" end super(idx,val) end @tk_windows = {}.taint @tk_table_list = [].taint @init_ip_env = [].taint # table of Procs @add_tk_procs = [].taint # table of [name, args, body] @cb_entry_class = Class.new(TkCallbackEntry){ class << self def inspect sprintf("#<Class(TkCallbackEntry):%0x>", self.__id__) end alias to_s inspect end def initialize(ip, cmd) @ip = ip @cmd = cmd end attr_reader :ip, :cmd def call(*args) @ip.cb_eval(@cmd, *args) end def inspect sprintf("#<cb_entry:%0x>", self.__id__) end alias to_s inspect }.freeze } def INTERP.cb_entry_class @cb_entry_class end def INTERP.tk_cmd_tbl @tk_cmd_tbl end def INTERP.tk_windows @tk_windows end # 略 ----- ここまで。 -- okkez okkez000@g... -- ML: ruby-reference-manual@m... 使い方: http://QuickML.com/
-> 260 2007-01-04 13:42 [okkez000@g... ] TclTkIpの特異メソッドとinstance_eval 261 2007-01-04 14:14 ┗[don@n... ] 262 2007-01-04 15:13 ┣[okkez000@g... ] 265 2007-01-04 23:12 ┗[aamine@l... ] 267 2007-01-05 06:50 ┗[okkez000@g... ] 269 2007-01-05 11:13 ┗[aamine@l... ]