dblack / rubypal.com wrote:
> Hi --
> 
> On Wed, 8 Aug 2007, Jano Svitok wrote:
> 
>> On 8/8/07, Shai Rosenfeld <shaiguitar / gmail.com> wrote:
>>> Alex Young wrote:
>>>> Shai Rosenfeld wrote:
>>>>> end
>>>>>
>>>>> ((i.e, whatever value is included in the array))
>>>>> ...how do i do this?
>>>>
>>>> Does the Array#include? method do what you need?  Perhaps a more
>>>> fleshed-out example might help?
>>>
>>> Array#include is EXACTLY what i need, but syntaxtetically (if u get the
>>> drift) i'm not sure how to do it:
>>>
>>> case [3, 45, 6, 'abc'].inlcude?
>>> when 1: 'no good'
>>> when 3: 'good!'
>>> when 'lolo': 'no good'
>>> end
>>>
>>> (the above doesn't work. it's gives a 'not enough arguments' error. how
>>> do i do it correctly?)
>>
>> You could possibly do something like the following, but it's pretty 
>> dangerous:
>>
>> class Object
>>      alias_method :old_case_equal, :===
>>
>>      def ===(other)
>>         case other
>>         when Array:
>>             other.include? self
>>         else
>>             old_case_equal(other)
>>         end
>>      end
>> end
> 
> Let's go back to the "pretty dangerous" thing :-)  I think this is
> beyond the acceptable danger threshold; you're actually making it so
> that Array#=== won't work any more, which could really make things
> blow up.
> 
> 
> David
> 

You don't need to do the 'dangerous' thing to create the same effect. 
You just need to create a proxy object that when === is called on it it 
delegates to the original method. See my post further down the list for 
full details.

case [2,3,4].casey.include?
when 1
     puts "a"
when 2
     puts "b"
else
     puts "c"
end

Brad