Hi David!
From: David A. Black [mailto:dblack@wobblini.net]
Hi -->> According to my experience, it's because Python is just insanely
>> inconsistent in every single way.
>
> examples?
>
> I will start with a ruby one:
>
> $1 to $9
> The contents of successive groups matched in the last successful
> pattern match.
> In "cat" =~/(c|a)(t|z)/, $1 will be set to ``a'' and $2 to ``t''.
> This variable is local to the current scope. {}I don't think you'd want it any other way. Imagine if you were using
those variables, and you called another method also did a matching
operation. Your $1 and friends would be clobbered.
Ok, that wasn't about bashing ruby (I'm not that silly trying this on a
ruby ML :)) it was in response to 'Python is just insanely inconsistent
in every single way' and I think Python isn't more or less inconsistent
than ruby (or perl, ehm, perhaps less)
Besides that. Yes I would like it another way, I don't like side
effects.
I don't want $1 to become global, but what the heck is this anyway?
But than, it doesn't bother me that much, I would never name one of my
globals (if I use one) $1, so I can safely ignore them.
> $0
> The name of the top-level Ruby program being executed.
> Typically this will be the program's filename.
> On some operating systems, assigning to this variable will
> change the name of the process reported (for example)
> by the ps(1) command.
>
> Actually this are two in one. If $1 to $9 are groups, I don't
> think $0 is following the principal of least surprise.POLS is *so* 2002... Anyway, it never meant that you didn't have
to learn anything to use Ruby. You have to learn that $0 is the
filename even though the other /^\$\d+$/ variables aren't. There: now
you know
What does bother me here is that there seems to be no other way than
using this ugly construct. (Did I miss something?)
> Additionally $1 to $9 aren't global despite the '$'.
That's actually good -- see above. (Unless you'd like 1,2,3...
themselves to be reassigned the values of your captures...? If
you don't like $1 etc. you can always use the MatchData object
directly.
Yep, again, this was only on inconsistency. No 'good' or 'bad'.
Talking about good and bad I would definitaly go with the MatchData
object.
My personal slogan for Ruby is:
The triumph of balance over symmetry
and this worked quite well.
and I guess one could add: the triumph of balance over mechanistic
consistency. Yes, abc can be a method while def is a keyword and ghi
is a variable. That's "inconsistent", but it has a positive, rather
than negative, effect on the design of the language and the look of
the code.
I was looking at Io this day (it was mentioned here multiple times)
and from what I did see, this is realy consistent - and not ugly in
any way.
Don't you like it better this way?
I like ruby, realy. I can live with the quirks, but I don't think they
make a better language.
David
--
David A. Black
dblack@wobblini.net
regards
Simon
···
On Fri, 19 Aug 2005, Kroeger Simon (ext) wrote: