why does this comment create a compile error

there is a line displayed within <pre>

<%= 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

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

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.