Project

General

Profile

Feature #11529

extensible % literal declarations

Added by eike.rb (Eike Dierks) over 5 years ago. Updated over 5 years ago.

Status:
Feedback
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:<unknown>]

Description

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 => "foo"
    but this is no longer true: %sqfooq => SyntaxError: (eval):2: unknown type of %string

  • the characters used for enclosing should be clearly defined

  • we have two classes:

    • paired chars like () [] {} <>
    • quoting chars like ' " / @ _ # $ %

My Suggestion:

Also available in: Atom PDF