青山です。

Fri, Feb 12, 1999 at 10:38:38AM +0900 において
Yukihiro Matsumoto さん曰く:

> |ということは、1.3以降では DelegateClass の立場はなくなる
> |ということでしょうか?
> 
> ただ単にインスタンス変数を使いたいという目的ではそうです.が,
> 他にも使い道はあるのではないかと考えるものです.あるのかな?

よく理解せずに使っているのですが、インスタンス変数をそのオブジェクトの
代表(?)、あるいはバック(?)にする事が簡単にできるのが便利だと思っています。

#!/usr/local/bin/ruby

require "delegate"

class A < SimpleDelegator
  def initialize
    @hash = {'a'=>'b'}
    super(@hash)
  end
  def help
    print "help\n"
  end
end

test = A.new
p test     # {'a'=>'b'}
test.help  # "help\n" を出力

A は Hash の拡張というわけではありませんが、まあ、help 付の Hash みた
いな感じになりますよね。

こういう事って delegate.rb を使わずに*簡単に*できましたっけ?
(delegate.rb で間に合っているので他の方法を考えた事がないもので...)

実用としては、cgi-lib.rb ではインスタンス変数 inputs へのアクセスを直
接行えるようにしています。

query = CGI.new
query['param'] # == query.inputs['param']

telnet.rb ではインスタンス変数 sock をそのようにしていますが、これは
sock へのアクセスを簡単にするというより、telnet.rb で定義していないソ
ケット系のメソッドを使いたい場合にそれらも利用できるようにする為です。

host = Telnet.new
host.waitfor(/match/)
host.cmd("command")
host.print("string")
... and host has Socket class methods


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>