Project

General

Profile

Feature #11529

Updated by nobu (Nobuyoshi Nakada) almost 5 years ago

The ruby syntax provides for declaring literals by using the % escapes: 

 - %q(foo) => 'foo' 
 - %Q(foo) => "foo" 
 - %w(foo bar) => ['foo', 'bar'] 
 - %i(foo bar) => [:foo, :bar] 

 It should be possible to define new % escapes. 

 *Use cases:* 

 I currently use: 
     %q{select foo from bar} 
 to quote my sql statements. 

 It would improve readability to spell that: 
     %sql{select foo from bar} 
 (with %sql being an alias of %q [see parsing problems below]) 

 But there could be more interesting uses: 

     %hash[ 
        a 1 
        b 2] 

     %triples[ 
         a b c 
         1 2 3] 

     %json/{"foo":"bar", "zip":"zap"}/ 

     %octal_data[012 345 677] 


 and the extension code would be something like 
     def %hash(s) 
         return ... 
     end 


 Notes: 

 - I did expect this to be a problem. But it's not. 
 - in my faint memory, old ruby versions were rumoured to parse `%sqfooq %sqfooq => "foo"` "foo" 
    but this is no longer true:    `%sqfooq %sqfooq => SyntaxError: (eval):2: unknown type of %string` %string 

 - the characters used for enclosing should be clearly defined 
 - we have two classes: 
   - 
 -- paired chars like `() () [] {} <>` 
   - <> 
 -- quoting chars like `' ' " / @ _ # $ %` % 

 My Suggestion: 

 
 - the quoting chars should be deprecated (try this:    `%Q%%%%`) %Q%%%%) 
 - the set of    paired chars should be extended to include selected pairs from unicode math symbols 

   - unicode does not yet define a plane for open-close-brackets 
    - see http://stackoverflow.com/questions/13535172/list-of-all-unicodes-open-close-brackets 



































   




Back