新井です。

In message "[ruby-list:36581] Re: [ANN] Ruby/Cache 0.2"
  on 24 Nov 2002 19:17:23 +0900,
  "Yoshinori K. Okuji" <okuji / enbug.org> wrote:

> どうしたら良いでしょうねえ。私の使い方なら、どこにmax_numを置いても、
> 結局明示的にnilを指定する必要があるので、変えましょうか?こういう時は
> やっぱりkeyword argumentsがあると便利だなと感じてしまいますね。

1 引数は
  Cache.new(max_num)
2 引数は
  Cache.new(max_obj_size, max_size)
3 引数は
  Cache.new(max_obj_size, max_size, expiration)
4 引数は
  Cache.new(max_obj_size, max_size, expiration, max_num)

っとしてみました。1引数が私の希望で3引数がおくじさんの希望、
4 引数は非互換になります。これがもっとも望ましいかどうかは怪
しいですが現存する利用例を元にってことで(^^;

# 動作確認してません m(__)m

--- ruby-cache-0.2/lib/cache.rb.org	2002-11-22 19:32:31.000000000 +0900
+++ ruby-cache-0.2/lib/cache.rb	2002-11-24 23:34:24.000000000 +0900
@@ -16,8 +16,20 @@
     CACHE_VERSION
   end
   
-  def initialize(max_obj_size = nil, max_size = nil, max_num = nil,
-		 expiration = nil, &hook)
+  def initialize(*args)
+    case args.size
+    when 1
+      max_num, = args
+    when 2
+      max_obj_size, max_size = args
+    when 3
+      max_obj_size, max_size, expiration = args
+    when 4
+      max_obj_size, max_size, expiration, max_num = args
+    else
+      raise ArgumentError, "wrong number of arguments"
+    end
+
     if max_obj_size and max_size and max_obj_size > max_size
       raise ArgumentError, "max_obj_size exceeds max_size (#{max_obj_size} > #{max_size})"
     end
@@ -38,8 +50,8 @@
     @max_size = max_size
     @max_num = max_num
     @expiration = expiration
-    @hook = hook
-    
+    @hook = Proc.new if block_given?
+
     @objs = {}
     @size = 0
     @list = []

--
新井康司 (Koji Arai)