Hi,
In message "[ruby-talk:01391] Some Questions - Parameterised Types / Invariants"
on 00/02/15, Nigel Rantor <wiggly / wiggly.org> 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