From: gotoken@... (GOTO Kentaro) Date: 2000-02-16T07:00:13+09:00 Subject: [ruby-talk:01404] Re: Some Questions - Parameterised Types / Invariants Hi, In message "[ruby-talk:01391] Some Questions - Parameterised Types / Invariants" on 00/02/15, Nigel Rantor writes: >1. Parameterised Types / Template Classes > >Are there any plans to add the above to Ruby? If not how do you guys >think the best way to implement type (class) safe generic data >structures is? Several months ago, I wrote parametic class helper mix-in. http://www.math.sci.hokudai.ac.jp/~gotoken/ruby/p/junk/paramclass.rb I put an example FixedSizeArray [ruby-list:18744] below. -- gotoken require "paramclass" class FixedSizeArray include Parametric include Enumerable def size; parameters[0]; end def default_value; parameters[1]; end def self.[](*args); self.new(*args); end def initialize(*args) @ary = args s = @ary.size raise ArgumentError, "Too many initial values" if s > size @ary.fill(default_value, s, size - s) end def [](n) if n < -size or size <= n raise IndexError, "index out of range" end @ary[n] end def []=(n,v) if n < -size or size <= n raise IndexError, "index out of range" end ary[n] = v end def each(&blk) @ary.each(&blk) end def inspect @ary.inspect end end # example a = FixedSizeArray(5, "")["foo", "bar", "baz"] #=> ["foo", "bar", "baz", "", ""] a.is_a? FixedSizeArray(5, "") #=> true