能否请您描述一下ERB文件中使用的以下字符的用法:
<% %>
<%= %>
<% -%>
<%# %>
每个有什么用?
#1楼
Rails默认不使用stdlib的ERB ,而是使用erubis 。 资料来源: 该开发人员的评论 , ActionView的gemspec 接受了我在编写此 文档时所做的 合并请求 。
它们之间行为的差异,特别是关于如何连字符运营%-
和-%
的工作。
文档稀缺, Ruby的ERB格式在哪里“正式”定义? 因此,以下是经验结论。
所有测试都假定:
require 'erb'
require 'erubis'
何时可以使用-
- ERB:你必须通过
-
对trim_mode
的选项ERB.new
使用它。 - erubis:默认启用。
例子:
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:如果下一个字符是换行符,则将其删除。
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
%-
和-%
一起做什么
两种效果的确切组合分别存在。
#2楼
由于其晦涩难懂,我添加了<%%
文字标签定界符作为对此的答案。 这将告诉erb不要解释标记的<%
部分,这对于js应用程序(例如显示chart.js工具提示等)是必需的。
更新(修复断开的链接)
现在可以在以下位置找到有关ERB的所有信息: https : //puppet.com/docs/puppet/5.3/lang_template_erb.html#tags
#3楼
这些是在轨道上的红宝石中使用的 :
<%%>:-
<%%>标记用于执行不返回任何条件(例如条件,循环或块)的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" %>
#4楼
<% %>
在其中执行代码,但不打印结果,例如:
我们可以将其用于erb文件中。
<% temp = 1 %>
<% if temp == 1%>
temp is 1
<% else %>
temp is not 1
<%end%>
将打印temp is 1
<%= %>
执行代码并打印输出,例如:
我们可以打印rails变量的值。
<% temp = 1 %>
<%= temp %>
将列印1
<% -%>
没什么区别,因为它不打印任何内容, -%>
仅对<%= -%>
有意义,这样可以避免换行。
<%# %>
将注释掉其中编写的代码。
#5楼
-
<% %>
:执行红宝石代码 -
<%= %>
:打印到Erb文件中。 或浏览器 -
<% -%>
:避免在表达式后换行。 -
<%# %>
:ERB评论
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3175528