Rubyについて Part47
■ このスレッドは過去ログ倉庫に格納されています
0212デフォルトの名無しさん
2012/05/08(火) 11:42:39.84「アクセスが記録されるのでアクセサメソッド使ってくださいね♪」とマニュアルにピンクの字で書いとけ
Rubyは「ユーザーの操作をプログラム的に監視して禁止や警告をする」のはあんまり得意ではない(放任主義)
再定義を監視するのができなかったがたぶんファイナライザ定義すればきっとできる(たぶん)
class LoggingProxy
REQUIRED = %w(__send__ object_id)
instance_methods.each{|mes| undef_method(mes) unless REQUIRED.include?(mes.to_s)}
def initialize(obj, orig_var, log = nil)
@obj, @orig_var, @log = obj, orig_var, log
end
def method_missing(name, *args, &block)
@log.warn("from #{name}") if @log
@orig_var.__send__(name, *args, &block)
end
class << self; attr_accessor :logger; end
end
class C
require 'logger'
def initialize
@log = Logger.new($stderr)
@var = LoggingProxy.new(self, 'ORIGINAL_VARIABLE', @log)
end
def hoo
p @var.downcase
@var = 'NEW VALUE!'
p @var.downcase
end
end
C.new.hoo
■ このスレッドは過去ログ倉庫に格納されています