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
,因此在title
为nil
的情况下,将返回else
分支中的字符串。
该行返回一个String,其值为base_title
而@title
作为双引号的结果进行插值。 在这个例子中, base_title
是一个局部变量,而@title
是一个实例变量 – 可能属于调用控制器中的任何方法。
有关更多信息,请访问:
关于字符串插值
论范围
- 无法推送到git hub
- Rails 4.2.0.beta2 – 无法连接到LocalHost?
- RailsTutorial 3.2 Ch 9 – “before {valid_signin(user)}”导致RSpec测试失败
- UsersController中的NoMethodError #show / undefined方法`key?’ 为零:NilClass
- 用户注册测试在M.Hartl的Rails教程中失败
- Rspec和命名路由
- 适用于使用carrierwave上传图像文件的用户的s3权限
- 为Heroku安装PostgreSQL gem pq
- 为什么carrierwave导致NameError:未初始化的常量Micropost :: PictureUploader错误?