[#4766] Wiki — "Glen Stampoultzis" <trinexus@...>

21 messages 2000/09/04
[#4768] RE: Wiki — "NAKAMURA, Hiroshi" <nahi@...> 2000/09/04

Hi, Glen,

[#4783] Re: Wiki — Masatoshi SEKI <m_seki@...> 2000/09/04

[#4785] Re: Wiki — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/09/05

Howdy,

[#4883] Re-binding a block — Dave Thomas <Dave@...>

16 messages 2000/09/12

[#4930] Perl 6 rumblings -- RFC 225 (v1) Data: Superpositions — Conrad Schneiker <schneik@...>

Hi,

11 messages 2000/09/15

[#4936] Ruby Book Eng. translation editor's questions — Jon Babcock <jon@...>

20 messages 2000/09/16

[#5045] Proposal: Add constants to Math — Robert Feldt <feldt@...>

15 messages 2000/09/21

[#5077] Crazy idea? infix method calls — hal9000@...

This is a generalization of the "in" operator idea which I

17 messages 2000/09/22

[#5157] Compile Problem with 1.6.1 — Scott Billings <aerogems@...>

When I try to compile Ruby 1.6.1, I get the following error:

15 messages 2000/09/27

[ruby-talk:5123] Re: Types and ===

From: "Brian F. Feldman" <green@...>
Date: 2000-09-26 03:31:33 UTC
List: ruby-talk #5123
> 
> ----- Original Message -----
> From: Yasushi Shoji <yashi@yashi.com>
> To: ruby-talk ML <ruby-talk@netlab.co.jp>
> Sent: Monday, September 25, 2000 7:25 PM
> Subject: [ruby-talk:5120] Re: Types and ===
> 
> 
> > '===' does not imply '==' at all.  '===' is defined in each class the
> > way to make writing case statement easier.  most classes use '==' for
> > '===', but some class, such as class Class and class Range uses
> > other.is_a?(self) and self.include?(other), respectively.
> >
> 
> Yes... I guess one root of my difficulty is that I have chosen to understand
> Ruby's case statement in terms of the switch statement in C/C++ or the
> case statement in Pascal (among others).
> 
> But now I think that Ruby's case statement is not really like any other
> multiway branch I have seen in any other language.

Right!  That's because Ruby is purely OO =)

> > > Actually I have trouble remembering what === means --
> > > whether to say x === y or y === x, which are of course
> > > not the same.
> >
> > so, i guess you don't have to remember what '===' at all ;)
> >
> > I think the moment you need to remember about '===' is when you write
> > your own class.  you can define '===' in your own class to control
> > case statement.
> 
> Yes, I guess that is true... but I do like to have a thorough understanding.
> 
> But sometimes I struggle with the case statement because of the lack of
> commutativity or symmetry. (Probably there are good reasons === is not
> symmetrical. I have not thought about it much.)

Well, it can't be symmetrical if operators are done as real OO (which, 
except for '=' and ',', they are -- just methods).

> For example, if I want to ask, "Which pattern does this string match?" I can
> easily do something like:
> 
> case mystring
>   when /pat1/
>      stmt1
>   when /pat2/
>       stmt
>   ...
> end
> 
> But to ask the question, "Which of these strings matches this pattern?" I
> cannot
> do this:
> 
> case /pattern/
>   when str1
>       stmt1
>   when str2
>       stmt2
>   ...
> end

So extend Ruby :)  Like this:

class String
        private
        OldEEE = method :===
        public
        def ===(other)
                if other.is_a? Regexp
                        return other === self
                end
                return OldEEE.call other
        end
end

> Hal

--
 Brian Fundakowski Feldman           \  FreeBSD: The Power to Serve!  /
 green@FreeBSD.org                    `------------------------------'



In This Thread