From: Brent Roman Date: 2005-01-05T14:27:56+09:00 Subject: Re: Allowing custom number literal suffixes? > Brent Roman wrote: > >> If so, maybe something like: >> >> t\4:30:19AM\ >> >> This would call Kernel::Literal::Prefix.t ('4:30:19AM') >> Or, if you'd rather have a suffix: >> >> \3/2\r >> >> calls Kernel::Literal::Suffix.r ('3/2') >> >> There's no reason one could not have 'I' for quaternians and 'i' for imaginary numbers, etc. >> Further, Prefixes and Suffixes need not be single letters: >> >> \-122.12'40"\Long >> \+37.19'59"\Lat >> >> call Kernel::Literal::Suffix.Long ('-122.12\'40"') >> and Kernel::Literal::Suffix.Lat ('+37.19\'59"') >> respectively > Florian Gross responded: > > But if it's already so hard to find support for the relatively simple and straight-forward patch from earlier, how are you going to get support for this? Note that I'm not entirely against this, but I think \3/2\r is a bit too complex for the simple number literal cases. > > Somehow I have the feeling that what you want to do could be accomplished with String suffixes. (Though I do not need this.) > > What do you think? > By "String suffixes" I assume you mean numeric literal suffixes implemented in Peter's patch. Correct? I don't think that this can cope with any of the examples I give above except for the 3/2r for which it was intended. Show me how I might use this patch to represent real-world literals containing the tic marks, double quotes, multiple dots, AM/PM and the like and I will be much more likely to support its inclusion into the core. I'd prefer to see a general mechanism incorporated rather than a patch for constrained cases. My clunky \3/2\r could be streamlined by making this simple numeric case a special shortcut that does not require the delimiters. [Much as simple arguments to outer method calls can omit parentheses.] Seeing a token that begins with a digit, the lexer would continue until the next character that is not a \.|digit|alpha. So, 3/2r+2 would be syntactically equivalent to 3/\2\r+2 both evaluate as: 3 / Kernel::Literal::Suffix.r('2') + 2 And, 4*100UL/2 would be syntactically equivalent to 4*\100\UL/2 both evaluate as: 4 * Kernel::Literal::Suffix.UL('100') / 2 Note that some european countries write time as hh.mm.ss If repeated dots are allowed in the unquoted form, those folks might be able to save a typing few backslashes. (as just compensation for umlauts, I suppose ;-) I'm not concerned about the details of how a user defined literal facility is implemented. Just so long as it does not increase the size of the core significantly and it allows arbitrary strings to function as Object literals. The above was just an example to show what I was after. Am I the only one interested in such a facility? - brent