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.