[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: #{} and \" don't like each other

Mark Wilson

9/16/2003 10:47:00 PM


On Tuesday, September 16, 2003, at 06:12 PM, Peter wrote:

> From the Programming Ruby book:
> <quote>
> In addition, you can substitute the value of any Ruby expression
> into a string using the sequence #{ expr }.
> </quote>
>
> [snip]

> name = "peter"
> temp = "name=\"" + name + "\""
> print "<user #{temp}></user>"

> [snip]

> One would expect that substituting the RHS of the assignment to temp
> for
> temp in the third statement, would work as well:

> [snip]

> (irb):2: warning: escaped terminator '"' inside string interpolation
> SyntaxError: compile error
> (irb):3: unterminated string meets end of file
> (irb):3: syntax error
> from (irb):3
>
> Anyway, what happens is that the escaped quotes are misinterpreted
> since
> the problem is gone when I leave them out.

> [snip]

As you may have already discovered, the following gives the expected
results:

print "<user #{"name=" + name + ""}></user>"

In the variable assignment, you need to escape the quotes because
otherwise the literal string you are creating would be considered
terminated. Inside a literal string, inside #{}, it's not necessary,
because we indicate the end of the expression to be interpolated with
an unescaped '}'. In addition, if we interpreted '\"' inside #{}, we
would not be able to terminate the parent string literal after the
appearance of '#{', which would be bad (because there is a sequence of
characters we can't put in a string literal, ever).

Regards,

Mark