文档章节

Rails中的ERB中的<%,<%=,<%#和-%>有什么区别?

j
 javail
发布于 02/26 21:19
字数 1030
阅读 146
收藏 0

能否请您描述一下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评论

本文转载自:https://de.sofbug.com/question/XYIx

j
粉丝 7
博文 1569
码字总数 0
作品 0
深圳
私信 提问
循环神经网络(RNN)的工作方式(二)

目录 本篇文章是吴恩达《深度学习》序列模型部分第一周课程的笔记,前面的小节的笔记见 循环神经网络(RNN)的工作方式(一)。 1.7 对新序列采样 在你训练一个序列模型之后,要想了解这个模...

hfutdog
03/31
0
0
[原创]Bash中的test,[,[[ 有什么区别

在Bash中,test, [, [[ 都可以用来对一个布尔表达式进行求值,比如: 一般情况下,三者的效果是一样的,但细节上存在差别 在大多数的Shell中, test和[ 是等价的(除了个别比较古老的Bourne Shel...

mj4738
2011/11/25
398
0
循环神经网络(RNN)的工作方式(一)

目录 0 前言 这篇博客主要是吴恩达《深度学习》课程的《序列模型》第一周课《循环序列模型》的笔记整理,中间加入了一些自己的理解,供自己以后能够快速复习,也供一些有需要的朋友查看。 1....

hfutdog
03/31
0
0
在SQL Server中保存和输出任意类型的文件

我们可以把任意类型的文件保存到SQL Server中,在进行例子之前,先建立测试用表格,TestFile.sql: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TestFiles]') a......

晨曦之光
2012/03/09
117
0
json数据中含有反斜杠和xml标签,在tostring后发现其中我想要的内容有所变化,具体情况如下

其中红色字体是我想获得的数据 我不知道如何在json中获得,所以将其转换成字符串 "items":["<\/docid> http://mp.weixin.qq.com/<\/key>555<\/tplid>11002601<\/classid> ab735a258a90e8e1......

wangtao137800
2016/01/07
2.6K
3

没有更多内容

加载失败,请刷新页面

加载更多

充值订单

充值订单 充值订单 1、用户登录到前台,可对个人账户充值2、点击充值进入支付页面,选择其中一种方式进行支付 3、打开后台-订单-充值订单,可根据下单时间、订单编号、充值用户来进行搜索。...

Geek-Chic
13分钟前
24
0
2.1 思科操作系统入门

cisco ios系统入门 IOS的存储和使用 IOS存储在Flash中,Flash属于非易失性存储,断电时不会丢失。 一台设备可用于存储多个版本的IOS,可以根据需要更改或者覆盖。 设备开机时,将IOS从Flash...

theyhq
17分钟前
23
0
String.format()占位符替换

作用:使用指定的格式字符串和参数返回一个格式化字符串。 str=String.format("Hi,%s %ss", "你好","java"); 常用的类型关系:

谷亚彬
34分钟前
34
0
作为HR,校招人才测评用什么工具好?

校招是一个直接面对众多优秀求职者的机会,是企业储备人才的宝地。每年大量的企业投身于校招的队伍中。 以前都是知名大企业进校园 如今....好像不限制了。 一次校招,我们大约能收到200多个简...

蛤蟆丸子
37分钟前
28
0
Dynamic Wallpaper for Mac(精美的动态壁纸) v3.5

Dynamic Wallpaper for Mac是一款功能强大的动态壁纸应用。动态壁纸应用 Mac版为你提供200+精美视频素材,卡通动漫、自然人文、萌宠萌物、游戏世界、创意视频、古风古色等等。 Dynamic Wall...

云不若
48分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部