请问有谁能描述一下在雇员再就业表文件中使用的下列字符的用法:
<% %>
<%= %>
<% -%>
<%# %>
每一种的用途是什么?
请问有谁能描述一下在雇员再就业表文件中使用的下列字符的用法:
<% %>
<%= %>
<% -%>
<%# %>
每一种的用途是什么?
当前回答
Rails默认情况下不使用stdlib的ERB,它使用erubis。来源:这个开发者的评论,ActionView的gemspec,接受了我写这篇文章时的合并请求。
它们之间存在行为差异,特别是连字符操作符%-和-%的工作方式。
Ruby的ERB格式“正式”定义在哪里?下面是经验结论。
所有测试假设:
require 'erb'
require 'erubis'
当你可以使用-
ERB:必须传递ERB的- to trim_mode选项。新使用它。 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: 在<% %>(没有=)中,-是无用的,因为<% %>和<% -%>是相同的。<% %>如果当前行只包含空格,则删除该行,否则不执行任何操作。 在<%= -%> (with =)中: 如果整行只包含空格,则删除整行 否则,如果标签之前有一个非空格,并且后面只有空白,则删除后面的空白 否则,标签后面有一个非空格:do nothing
例子:
# 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
%-和-%在一起做什么
两种效果的精确组合。
其他回答
Rails默认情况下不使用stdlib的ERB,它使用erubis。来源:这个开发者的评论,ActionView的gemspec,接受了我写这篇文章时的合并请求。
它们之间存在行为差异,特别是连字符操作符%-和-%的工作方式。
Ruby的ERB格式“正式”定义在哪里?下面是经验结论。
所有测试假设:
require 'erb'
require 'erubis'
当你可以使用-
ERB:必须传递ERB的- to trim_mode选项。新使用它。 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: 在<% %>(没有=)中,-是无用的,因为<% %>和<% -%>是相同的。<% %>如果当前行只包含空格,则删除该行,否则不执行任何操作。 在<%= -%> (with =)中: 如果整行只包含空格,则删除整行 否则,如果标签之前有一个非空格,并且后面只有空白,则删除后面的空白 否则,标签后面有一个非空格:do nothing
例子:
# 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
%-和-%在一起做什么
两种效果的精确组合。
<% %>
执行括号内的ruby代码。
<%= %>
将内容打印到erb文件中。
<%== %>
相当于<%= raw %>。逐字打印(即w/o转义)到erb文件。(摘自Ruby on Rails指南)
<% -%>
避免在表达式后换行。
<%# %>
注释掉括号内的代码;不发送到客户端(相对于HTML注释)。
访问Ruby Doc了解更多关于雇员再培训局的信息。
我添加了<%%文字标记分隔符作为答案,因为它是模糊的。这将告诉erb不要解释标签的<%部分,这对于js应用程序(如显示chart.js工具提示等)是必要的。
更新(修复断开链接)
有关雇员再培训局的资料,可在此查阅: https://puppet.com/docs/puppet/5.3/lang_template_erb.html#tags
<% %>:执行ruby代码 <%= %>:打印到Erb文件。或浏览器 <% -%>:避免在表达式后换行。 <%# %>: ERB注释
<% %>执行其中的代码,但不打印结果,例如: 我们可以将它用于erb文件中的if else。
<% temp = 1 %>
<% if temp == 1%>
temp is 1
<% else %>
temp is not 1
<%end%>
打印temp是否为1
<%= %>执行代码并打印输出,例如: 我们可以打印一个rails变量的值。
<% temp = 1 %>
<%= temp %>
将打印1
<% -%>没有区别,因为它不打印任何东西,-%>只适用于<%= -%>,这将避免新行。
<%# %>将注释掉在此代码中编写的代码。