Xavier Noria
10/12/2006 10:57:00 AM
On Oct 12, 2006, at 10:20 AM, eden li wrote:
> This question came up because I was dealing with a library that has
> wrapped a proxy class around an Array that intercepted methods to make
> it appear as if that class is actually an Array class (rails'
> AssociationProxy for those counting). Because I'm not native in Ruby,
> I spent a good deal of time debugging a particular case/when
> statement.
>
> This proxy class undefines all non-critical instance method (ie, ones
> that Ruby does not throw an error for when you call undef_method on
> them) and passes them to an internal instance variable on
> method_missing. This makes it seem like an object of this proxy class
> look like an instance of its internal variable, but only until you
> pass
> it to the case/when construct.
>
> This makes me wonder how the proxy class could be rewritten to make
> case/when operate on that internal variable.
In fact, why not just subclass Array?
Which is the benefit of pretending to be an Array to the point that
AssociationProxy#class returns Array? People get confused with a
different find/select in those "arrays", case/when behaves
unexpectedly, ..., is there some technical reason a subclass wouldn't
work or would have other sort of drawbacks that weight more?
-- fxn