Michael Lazzaro writes:
 > Let's summarize some of the string-to-num issues:
 > 
 >    my int $i = literal "0xff";   # 255
 > 
 > 
 > (3) -- We want to be able to parse a string as a number using a very 
 > _specific_ rule; for example, if a user is expected to enter a value in 
 > a specific format, like octal "755" or hex "FF", we want to "know" what 
 > we're expecting.  That implies there may be functions for each common 
 > format:
 > 
 >    my int $i = sci "1e33";
 >    my int $i = hex "00ff";
 > 

the default behaiviour of "literal" should be same as perl parsing of
literals. but sub literal can have additional parameters . 

I think sci and hex should be just this case : 

 >    my int $i = sci "1e33";

my int $i = literal "1e33" : "format" => "sci" ;

 >    my int $i = hex "00ff";

my int $i = literal "00ff" : "format" => "hex" ;

or some *perl*-like shortcuts . 


also it seems that there sould be symmetry ( as was declared ) between
types and type - casting functions 

so , probably "literal" should be called "num" or "int" or "uint16" ,
depending on  WYW . or the casting may be let to happen in two stages
: string -> num -> specific num type  ,e.g. uint16

so these examples probably should be 

 >    my int $i = sci "1e33";

my int $i = int "1e33" : "format" => "sci" ;

 >    my int $i = hex "00ff";

my int $i = int "00ff" : "format" => "hex" ;


 > 
 > (4) -- We want to be able to output numbers to strings according to 
 > specific formatting rules.  One way to do this (aside from using 
 > sprintf) is to use sprintf-style formatting strings, perhaps as 
 > properties to tie them to individual instances:
 > 
 >     my int $i = literal "0xff" but as_string('%02x');
 > 
 > or explicitly each time you call the stringifyier:
 > 
 >     my str $s = str($i : base   => 16    );
 >     my str $s = str($i : format => '%02x');
 > 

you see here you use the same concept : type name is same as
type-casting function . I think that was declared in Apo2 (???). 

also , just to be sure , is it correct base should be "base" here ??? 

 > or explicitly by using a class method of the number to force it:
 > 
 >     my str $s = $i.as_string('%02x');
 > 
 > 
 > (5) -- An earlier proposal I had is to make C<bin>, C<oct>, C<hex>, 
 > etc. subclasses that overloaded their string-in and string-out methods, 
 > such that:
 > 
 >     my sci $i = "1e5"     # 10**5
 >     my hex $i = "ff";     # 255
 >     print $i;             # "FF"
 >     print bin $i;         # "11111111"


so you say something like that :
class sci is WHAT??? {
        method as_string { ... } 
}

but who is ancestor ?? num , int, uint16 . 

I think it is more like 

      my $i is as_string_opts("format"=>"sci")= "1e5"     # 10**5
      my $i is as_string_opts("format"=>"hex") = "ff";     # 255
      print $i;             # "FF"
      print bin $i;         # "11111111"


so now you tell perl that whatever sits inside $i , if it is going to
be stringifyed by "as_string" method -- add one more parameter to this 
stringification function . something like that . 


> 
 > which is very useful for some scripts, and would give the typecasts 
 > shown in (3) and (4) for free.  If you wanted to do the same for any 
 > arbitrary format, you'd have to make your own classes with similar 
 > string in/out rules.
 > 
 > Comments?
 > 
 > MikeL
 > 
 > 
 > 

arcadi 

Reply via email to