Robert Klemme wrote:
"Trans" <transfire@gmail.com> schrieb im Newsbeitrag
news:1113017766.220202.153150@f14g2000cwb.googlegroups.com...
> Thanks Robert.
>
> I agree about returning self. Since dup can't be used when the
object
> is immutable (that's the condition isn't it?) then it would seem
> reasonable to return self.
Yeah, but in that case other applications can break because they
think they
have a new instance while they have not. As I said, both approaches
have
their merits - a classical dilemma.
Could Marshal be used to remedy this?
> I'm not sure what recursive structures you mean. And I don't see
how it
> could work if the duping is left to the block. How could a new hash
be
> built up then?
No, you need to create a new Hash instance. But you don't
necessarily need
to dup keys and values. That's the dup I suggested to leave to the
block.
Okay, I'll give this some more thought.
> Hmm... perhaps it would work better if a hash parameter were fed
into
> the block itself and then that could be used?
>
> h = h.traverse { |n,k,v| n[k.downcase] = v }
>
> Would that a better approach?
I wouldn't do that.
No good ey? I was thinking of it would work something like inject. But
maybe this over complexifies the problem.
That's not a solution for the dup problem, as "k,v = kv.first.dup,
kv.last.dup" will throw anyway.
Oops. Your right, still some problems there.
If you really always need copies then the easiest might acutally be
to use
Marshal and work on the copy. Marshal has solved all the problems of
recursion and duping already - so why do the work twice?
Okay, I'll give that a go too. Thanks, robert.
T.