Feature #11529

Updated by nobu (Nobuyoshi Nakada) over 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: 

        a 1 
        b 2] 

         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 ... 


 - 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