能否请您描述一下ERB文件中使用的以下字符的用法:
<% %>
<%= %>
<% -%>
<%# %>
每个有什么用?
<%= %>
并<%= -%>
有所不同:只有后者会删除结尾的空白。
能否请您描述一下ERB文件中使用的以下字符的用法:
<% %>
<%= %>
<% -%>
<%# %>
每个有什么用?
<%= %>
并<%= -%>
有所不同:只有后者会删除结尾的空白。
Answers:
<% %>
在括号内执行红宝石代码。
<%= %>
将某些内容打印到erb文件中。
<% -%>
避免在表达式后换行。
<%# %>
在括号内注释掉代码;未发送给客户端(与HTML注释相反)。
访问Ruby Doc以获取有关ERB的更多信息。
<%#
只是正常现象<%
,#
后面紧跟着Ruby注释....是的,觉得这很特别很有趣,但这不只是ERB习语而不是特殊的语法构造吗?
<%...%>
,<%#...%>
注释出所有的它,而如果这只是一个正常的评论(它不会做即它只会注释掉线它在)。
<% %>
并且<%- and -%>
适用于任何Ruby代码,但不输出结果(例如if语句)。两者是相同的。
<%= %>
用于输出Ruby代码的结果
<%# %>
是ERB评论
这是一个很好的指南:http : //api.rubyonrails.org/classes/ActionView/Base.html
<%-
对于领先的空格没有任何作用,而且我也看不到任何地方有文档记录。你确定吗?也许这与ERB不同。在stdlib文档中没有显示任何选项。
Rails 默认不使用stdlib的ERB,而是使用erubis。资料来源:本开发的评论,的ActionView的gemspec,接受的合并请求在写这个我做了。
这里是他们之间的行为差异,特别是关于如何连字号经营者%-
和-%
工作。
文档稀缺,Ruby的ERB格式在哪里“正式”定义?因此,以下是经验结论。
所有测试都假定:
require 'erb'
require 'erubis'
什么时候可以使用 -
-
给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:如果下一个字符是换行符,则将其删除。
erubis:
in <% %>
(without =
)中,-
是没有用的,因为<% %>
和<% -%>
相同。<% %>
如果当前行仅包含空格,则将其删除,否则不执行任何操作。
在<%= -%>
(中=
):
例子:
# 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:无用,因为<%- %>
它与<% %>
(without =
)相同,并且不能与之一起使用,=
这是唯一-%
有用的情况。所以永远不要使用这个。
例子:
# 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文件中。或浏览器 <% -%>
:避免在表达式后换行。 <%# %>
:ERB评论<%%
由于其晦涩难懂,我添加了文字标签定界符作为对此的答案。这将告诉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
<% -%>
这没有区别,因为它不打印任何内容,-%>
仅对有意义<%= -%>
,这样可以避免换行。
<%# %>
将注释掉其中编写的代码。