почему синтаксис #comment не разрешен в erb ?

#ruby-on-rails #erb

#ruby-on-rails #ошибка

Вопрос:

Я использую Ruby on Rails 3. Я пытался добавить #comment в <% =%> , и оказалось, что это недопустимо … и возникла ошибка… Мой код:

 <%= @page_title || 'Pragmatic Bookshelf' #magic @page_title; a if a is true, else b%>
  

Кажется, нормально помещать #comment в <% %> без знака равенства в нем. Мой вопрос: почему это?

Кроме того, как вы помещаете комментарий внутрь <% = %>?

Спасибо.

Ответ №1:

#comment Выполняется до конца строки, но использование = перезаписывается как вызов функции, например puts()

Если мы перепишем

 <%= @page_title || 'Pragmatic Bookshelf' #magic @page_title; a if a is true, else b%>
  

как

 puts(@page_title || 'Pragmatic Bookshelf' #magic @page_title; a if a is true, else b)
  

Становится ясно, что закрывающая скобка ) является частью комментария, и поэтому оператор не может быть правильно проанализирован.

Чтобы обойти это, мы можем просто использовать отдельный блок комментариев ERB, например:

 <%= @page_title || 'Pragmatic Bookshelf' %><%# magic @page_title; a if a is true, else b%>
  

В заключение отметим, что использование || оператора для объединения нулевых переменных является очень распространенной идиомой Ruby и вообще не нуждается в комментарии. Как говорит Стив Макконнелл в «Code Complete«, комментарии должны объяснять, почему что-то делается, а не как что-то делается.

Комментарии:

1. о, спасибо за последнее замечание. но мой случай в том, что я просто начал изучать rails в течение 1 дня только тогда, когда написал этот код… Я обещаю, что не собираюсь делать этого позже … 🙂

2. другой вопрос: почему <% concat(csrf_meta_tag) #aa%> недопустим, в то время как <% javascript_include_tag:defaults #abc%> допустим?

3. Возможно ли, что concat не определено? Обычно он вызывается в строке, такой как "Hello".concat(", world!")

4. это метод в TextHelpers от rails, смотрите на api.rubyonrails.org/classes/ActionView/Helpers /…