Ruby(on Rails)语法

我正在回顾“Ruby on Rails 3 Tutorial”并试图在更深层次上理解语法。 以下是我定义的辅助操作的一些示例代码:

module ApplicationHelper def title base_title = "Mega Project" if @title.nil? base_title else "#{base_title} | #{@title}" end end end 

我的问题是: "#{base_title} | #{@title}"

这条线的结构究竟发生了什么?

在更高的层面上,查找这样的东西的首选来源在哪里?

在双引号字符串中,#{}中的任何内容都被解释为代码,结果嵌入到字符串中,因此您期望的结果是:

| <标题实例变量的值>”。

字符串插值: http : //en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals#Interpolation

探索这个问题最有用的方法是使用irb

 1.9.2p290 :001 > base_title = "things" => "things" 1.9.2p290 :002 > title = "stuff" => "stuff" 1.9.2p290 :003 > "#{base_title} | #{title}" => "things | stuff" 

这里实际发生的是你有一个局部变量base_title ,它包含一个字符串和一个实例变量@title ,它也包含一个字符串。 带有哈希等的字符串是使用字符串插值格式化这些变量 – 一种特殊的字符串语法,使得解释器在评估时将变量的值插入字符串。 这是关于它的好post 。

我建议买一本关于Ruby的书。

#{}是字符串中的变量插值。 可以把它想象成一种更简洁的说法

 base_title + " | " + @title 

在这种情况下,它可能不会短得多,但是当你有很多小部件的长琴弦时,它会提高可读性。

Ruby 1.9中引入的相关function是使用%插值:

 "%s | %s" % [base_title, @title] 

这也允许格式化(数字等)。 查看文档 。

在ruby中, #{}在字符串中用于插入变量。 这称为插值。

在这段特定的代码中,如果存在标题,则将其添加到基本标题中,例如。

 title: "Super Thingo" 

 "Mega Project | Super Thingo" 

如果没有标题,它只会回到基本标题上。

它只是一个带插值的字符串。 由于Ruby方法返回最后一个计算表达式的值而没有显式return ,因此在titlenil的情况下,将返回else分支中的字符串。

该行返回一个String,其值为base_title@title作为双引号的结果进行插值。 在这个例子中, base_title是一个局部变量,而@title是一个实例变量 – 可能属于调用控制器中的任何方法。

有关更多信息,请访问:
关于字符串插值
论范围