Why does this comment create a compile error

there is a line displayed within

<%= h @stories.inspect %>

and the output was too long, so i changed it to

<%= #h @stories.inspect %>

<% @stories.each do |s| %>
<%= h s.inspect %>
<% end %>

(commenting out the first line). now the code will fail to compile…
saying

compile error
/Users/winterheat/ror/shov2/app/views/stories/index.html.erb:13: syntax
error, unexpected kENSURE, expecting ‘)’
/Users/winterheat/ror/shov2/app/views/stories/index.html.erb:15: syntax
error, unexpected kEND, expecting ‘)’

and if i remove that commented line altogether, the code will work. i
thought in some book, it is said that you can comment out some code in
ERB like that?

Update: funny if i change it to

<% #h @stories.inspect %>

then it will compile fine… so the displaying of result tag <%= %>
doesn’t like comments, it seems.

I believe that a comment in erb has to start <%#
Other similar sequences have worked in some versions, or may sometimes
work
but are not guaranteed.

Colin

2009/5/24 SpringFlowers AutumnMoon [email protected]

I’ve run into the same problem several times before and never thought
too much of it, just made the correct change to be able to compile and
kept going. Now that I think about it I might have an answer.

The ruby code is just what it is between <% and %>. Those ‘delimiters’
are just to tell the engine something like ‘ruby code coming’. The =
sign is probably actually a method call equivalent to ‘puts’ (I might
have read that somewhere in the AWDWR book). The rest of the line is
the parameter to the method. By putting the # sign after the = sign we
are actually commenting out the parameter to the method but leaving
the method call in place. The interpreter might not know what to do
with a method call with no parameter (maybe a parameter is mandatory
for the = sign method?) and burps. However if you put the # sign in
front of the method call (the = sign) you are commenting the whole
ruby code, hence the interpreter has no problem with it.

This is just a guess about what might be going on and if anybody knows
the right answer out there I would like to know.

Pepe

On May 24, 3:31 pm, SpringFlowers AutumnMoon <rails-mailing-

pepe wrote:

I’ve run into the same problem several times before and never thought
too much of it, just made the correct change to be able to compile and
kept going. Now that I think about it I might have an answer.

The ruby code is just what it is between <% and %>. Those ‘delimiters’
are just to tell the engine something like ‘ruby code coming’. The =
sign is probably actually a method call equivalent to ‘puts’ (I might
have read that somewhere in the AWDWR book). The rest of the line is
the parameter to the method. By putting the # sign after the = sign we
are actually commenting out the parameter to the method but leaving
the method call in place. The interpreter might not know what to do
with a method call with no parameter (maybe a parameter is mandatory
for the = sign method?) and burps. However if you put the # sign in
front of the method call (the = sign) you are commenting the whole
ruby code, hence the interpreter has no problem with it.

yeah i am suspecting it is either:

<%= whatever %>

changed to <% concat(whatever) %>
or changed to <% output_buffer << whatever %>

so if it is

<%= #comment %>

it becomes

<% concat( #comment ) %>

or

<% output_buffer << #comment %>

the first one fails because it comments out the “)” as well. the second
one fails because it is missing something for the “<<” operator.