I’m too lazy to figure it out (and a bit hangover).
I have several collections of objects (read over an OLE API) that I
transform to arrays of ruby objects.
Against the DRY religion I ended up with several methods similar to the
following:
def get_processors col
ar=Array.new
count=col.Count
1.upto(count){|i|
ar<<Processor.new(col.GetAt(i))
}
return ar
end
Now, this begs for the working equivalent of
def get_collection col, _class
ar=Array.new
count=col.Count
1.upto(count){|i|
ar<<_class.new(col.GetAt(i))
}
return ar
end
How do I do it?
(I do know how do it - I think . It’s just that the hangover is not
helping the search functions of my brain )
i.e. this would do what I want
def get_collection col, _class
ar=Array.new
count=col.Count
1.upto(count){|i|
ar<<instance_eval(_class+“.new(col.GetAt(i))”)
}
return ar
end
I’m too lazy to figure it out (and a bit hangover).
I have several collections of objects (read over an OLE API) that I transform
to arrays of ruby objects.
Against the DRY religion I ended up with several methods similar to the
following:
def get_processors col
ar=Array.new
count=col.Count
Are you sure you’ve got Count as a method name? It’s possible, but
fairly bizarre.
count=col.Count
1.upto(count){|i|
ar<<_class.new(col.GetAt(i))
}
return ar
end
I guess col is 1-originating, so you’d have to adapt this, but here it
is with a normal array:
def get_collection(col, klass)
col.map {|e| klass.new(e) }
end
If klass is a string, you’d have to do a const_get on it first:
klass = Object.const_get(klass)
or the traditional deep version, if it’s a nested constant:
Are you sure you’ve got Count as a method name? It’s possible, but
fairly bizarre.
Yeap, we’re not talking Ruby objects here. It’s an OLE API and it uses
some pretty un-ruby names.
So col is an an OLE object missing such nice conveniences like each and
collect and map.
Well, assumptions can kill you. The following works as is, so all this
was a post with no reason to exist whatsoever.
class P
attr_reader :c
def initialize c
@c=c
end
def to_s
return @c
end
end
def get_collection col,_class
ar=Array.new
col.each{|e|
ar<<_class.new(e)
}
return ar
end