[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Array#===

Martin DeMello

2/19/2005 10:04:00 PM

It seems a bit of a waste for Array#=== to default to Object#=== - it'd
be far more useful, IMO, to have it call include?. Can anyone see a
drawback to this?

Here's a real-world use case from the FXIrb code:

def onKeyPress(sender,sel,event)
case event.code
when Fox::KEY_Delete,Fox::KEY_KP_Delete,Fox::KEY_BackSpace
if getCursorPos > @anchor
super
end

which a change to Array#=== would let me write as

config[:delete_keys] =
[Fox::KEY_Delete,Fox::KEY_KP_Delete,Fox::KEY_BackSpace]
.
.
.
when config[:delete_keys]
__etc__


martin
4 Answers

Mark Hubbart

2/19/2005 10:14:00 PM

0

On Sun, 20 Feb 2005 07:04:44 +0900, Martin DeMello
<martindemello@yahoo.com> wrote:
> It seems a bit of a waste for Array#=== to default to Object#=== - it'd
> be far more useful, IMO, to have it call include?. Can anyone see a
> drawback to this?

I've wondered about this too. It seems that the === method loosely
translates to a membership test, so it would make sense if it tested
membership with arrays, as well as ranges and classes and regexps. I
can't see any drawbacks, though. (though that doesn't mean there
aren't any)

cheers,
Mark


Joel VanderWerf

2/20/2005 3:02:00 AM

0

Martin DeMello wrote:
> It seems a bit of a waste for Array#=== to default to Object#=== - it'd
> be far more useful, IMO, to have it call include?. Can anyone see a
> drawback to this?
>
> Here's a real-world use case from the FXIrb code:
>
> def onKeyPress(sender,sel,event)
> case event.code
> when Fox::KEY_Delete,Fox::KEY_KP_Delete,Fox::KEY_BackSpace
> if getCursorPos > @anchor
> super
> end
>
> which a change to Array#=== would let me write as
>
> config[:delete_keys] =
> [Fox::KEY_Delete,Fox::KEY_KP_Delete,Fox::KEY_BackSpace]
> .
> .
> .
> when config[:delete_keys]
> __etc__
>
>
> martin

How about using the splat idiom?

a = [1,2,3]
case 3
when *a; p a
end


Joel VanderWerf

2/20/2005 3:14:00 AM

0

Martin DeMello wrote:
> It seems a bit of a waste for Array#=== to default to Object#=== - it'd
> be far more useful, IMO, to have it call include?. Can anyone see a
> drawback to this?

We'd lose this, FWIW:

points = [
[1,2],
[3,4],
[0,0]
]

points.each do |point|
case point
when [0,0]
puts "origin!"
end
end

To be a bit philosophical, I'd say that Arrays, unlike Regexps, do not
exist primarily to match, and so #=== should be Object#===.


Martin DeMello

2/20/2005 12:11:00 PM

0

Joel VanderWerf <vjoel@path.berkeley.edu> wrote:

> How about using the splat idiom?
>
> a = [1,2,3]
> case 3
> when *a; p a
> end

Very neat - didn't think of that.

martin