From: "Florian Groß" Date: 2005-01-04T06:02:38+09:00 Subject: Re: Allowing custom number literal suffixes? Mathieu Bouchard wrote: > On Tue, 4 Jan 2005, Florian Gro� wrote: >>While this is a nice idea I don't feel sure about polluting the global >>method space with one-character names. > > Hahaha, so you prefer to pollute the Ruby grammar instead? > > What's that aversion for the global namespace, that is so great that > instead it is preferred to instead add things to the _grammar_ ??? I prefer not having global methods with one-character names as those might already be used for something else. Just think about 'p' or the common variable names 'i', 'j', 'x', 'y' and so on. The collision chance with something like 'number_literal_r' is way lower and that particular grammar was until now invalid meaning it will not cause incompatibilities either. If you think the decision to add this is to arbitrary please note that the feature is also present in other languages meaning it would already be familiar to users who are already used these kind of suffixes in Java, C#, C++ or Python. >>And I think it would not cause many problems to make an yet unused >>syntax do something meaningful. > The syntax of Ruby is already complicated enough, imho, but a better > reason against the 0.5R syntax is that it can only represent rationals > that have denominators that divide a power of ten. If you allow the use of > 0,0b,0x prefixes it doesn't change because those notations allow even less > denominators (only powers of two). However I recall some languages use a > notation like 2r3 to mean specifically Q(2,3), while 2/3 means something > else (usually the float 0.666... or the 0 integer). Actually I'm hesitant to add the suffixes for non-base-10 radixes as that would complicate all this quite a lot -- it would be hard to specify a suffix for hex literals, for example. I hope that is not too much of a limit for you. > While we're at it, why not adding such syntax: > > * while Complex===3i with a lowercase i, the uppercase I,J,K suffixes > would be of class Quaternion. > > * 7m9 would be a literal meaning the set of all 9*m+7 numbers, > which is an object of class ModuloInteger. > > (just kidding!) Please note that I am not proposing hard-coding these literals. I have suggested to use callbacks instead as the R => Rational association does not belong into the core language. It belongs into the Rational library.