可否請您描述一下ERB文件中使用的如下字符的用法: html
<% %> <%= %> <% -%> <%# %>
每一個有什麼用? git
Rails默認不使用stdlib的ERB ,而是使用erubis 。 資料來源: 該開發人員的評論 , ActionView的gemspec 接受了我在編寫此 文檔時所作的 合併請求 。 github
它們之間行爲的差別,特別是關於如何連字符運營%-
和-%
的工做。 c#
文檔稀缺, Ruby的ERB格式在哪裏「正式」定義? 所以,如下是經驗結論。 瀏覽器
全部測試都假定: ruby
require 'erb' require 'erubis'
什麼時候能夠使用-
less
-
對trim_mode
的選項ERB.new
使用它。 例子: 工具
begin ERB.new("<%= 'a' -%>\nb").result; rescue SyntaxError ; else raise; end ERB.new("<%= 'a' -%>\nb" , nil, '-') .result == 'ab' or raise Erubis::Eruby.new("<%= 'a' -%> \n b").result == 'a b' or raise
-%
是: 測試
ERB:若是下一個字符是換行符,則將其刪除。 ui
erubis:
在<% %>
(無=
)中, -
沒用,由於<% %>
和<% -%>
相同。 <% %>
若是僅包含空格,則刪除當前行,不然不執行任何操做。
在<%= -%>
(帶有=
):
例子:
# Remove ERB.new("a \nb <% 0 -%>\n c", nil, '-').result == "a \nb c" or raise # Don't do anything: not followed by newline, but by space: ERB.new("a\n<% 0 -%> \nc", nil, '-').result == "a\nb \nc" or raise # Remove the current line because only whitesapaces: Erubis::Eruby.new(" <% 0 %> \nb").result == 'b' or raise # Same as above, thus useless because longer. Erubis::Eruby.new(" <% 0 -%> \nb").result == 'b' or raise # Don't do anything because line not empty. Erubis::Eruby.new("a <% 0 %> \nb").result == "a \nb" or raise Erubis::Eruby.new(" <% 0 %> a\nb").result == " a\nb" or raise Erubis::Eruby.new(" <% 0 -%> a\nb").result == " a\nb" or raise # Don't remove the current line because of `=`: Erubis::Eruby.new(" <%= 0 %> \nb").result == " 0 \nb" or raise # Remove the current line even with `=`: Erubis::Eruby.new(" <%= 0 -%> \nb").result == " 0b" or raise # Remove forward only because of `-` and non space before: Erubis::Eruby.new("a <%= 0 -%> \nb").result == "a 0b" or raise # Don't do anything because non-whitespace forward: Erubis::Eruby.new(" <%= 0 -%> a\nb").result == " 0 a\nb" or raise
%-
做用:
ERB:僅在標記以前和以前的換行符以後刪除空格,但前提是以前只有空格。
erubis:無用,由於<%- %>
與<% %>
相同(不帶=
),而且不能與=
一塊兒使用,這是-%
有用的惟一狀況。 因此永遠不要使用這個。
例子:
# Remove ERB.new("a \n <%- 0 %> b\n c", nil, '-').result == "a \n b\n c" or raise # b is not whitespace: do nothing: ERB.new("a \nb <%- 0 %> c\n d", nil, '-').result == "a \nb c\n d" or raise
%-
和-%
一塊兒作什麼
兩種效果的確切組合分別存在。
因爲其晦澀難懂,我添加了<%%
文字標籤訂界符做爲對此的答案。 這將告訴erb不要解釋標記的<%
部分,這對於js應用程序(例如顯示chart.js工具提示等)是必需的。
更新(修復斷開的連接)
如今能夠在如下位置找到有關ERB的全部信息: https : //puppet.com/docs/puppet/5.3/lang_template_erb.html#tags
這些是在軌道上的紅寶石中使用的 :
<%%>:-
<%%>標記用於執行不返回任何條件(例如條件,循環或塊)的Ruby代碼。 例如:-
<h1>Names of all the people</h1> <% @people.each do |person| %> Name: <%= person.name %><br> <% end %>
<%=%>:-
用於顯示內容。
Name: <%= person.name %><br>
<%-%>:-
Rails擴展了ERB,所以您只需在Rails模板的標籤中添加尾隨連字符就能夠取消換行符
<%#%>:-
註釋掉代碼
<%# WRONG %> Hi, Mr. <% puts "Frodo" %>
<% %>
在其中執行代碼,但不打印結果,例如:
咱們能夠將其用於erb文件中。
<% temp = 1 %> <% if temp == 1%> temp is 1 <% else %> temp is not 1 <%end%>
將打印temp is 1
<%= %>
執行代碼並打印輸出,例如:
咱們能夠打印rails變量的值。
<% temp = 1 %> <%= temp %>
將列印1
<% -%>
沒什麼區別,由於它不打印任何內容, -%>
僅對<%= -%>
有意義,這樣能夠避免換行。
<%# %>
將註釋掉其中編寫的代碼。
<% %>
:執行紅寶石代碼 <%= %>
:打印到Erb文件中。 或瀏覽器 <% -%>
:避免在表達式後換行。 <%# %>
:ERB評論