From: Xavier Noria Date: 2006-10-12T19:56:39+09:00 Subject: Re: Does case/when really use ===? 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