`

娃娃鸭学Ruby-5、空白符

阅读更多
空白符包括:空格符、制表符和换行符,它们本身并不是标记,而是用于分隔不同的标记,以免这些标记合并成一个标记。

注意:
有时候的空白符是必须的,还有一些实际上是被禁止的。


1、作为语句终结符的换行符
C和Java每个语句必须以分号结尾。在Ruby中,也可以用分号来终结语句,但这并不是必须的。只有当你试图在一行代码里面放置多条语句时,才须要使用分号分隔它们。除此之外,依照惯例分号都是被省略掉的。

Ruby解释器的智能:
在没有显式的分号结尾下,Ruby解释器自己会找何处结尾。
如果一行Ruby代码是一个句法完整的语句,那么Ruby就将该行结尾的换行符看成是此语名的终结符,否则Ruby将继续解析下一行的语句,直到得到一个完整的语句。
有智能就会存在问题:
如果语句分布多行,就可能会被错误解释。
total=x+
y
----------------------------------------
Ruby会正确解释
但是如果是
total=x
+y
----------------------------------------
会被解释成两个表达式,total=x 将x的值赋给total,下行+y没什么意思,但是是完成的表达式。

return 和break语句可能会解释不正确。

总结:
在以下几种情况下可以放心换行
1)、一个操作符之后换入换行符,如
puts x+
y
2)、在方法调用的句点之后插入换行符
Foo.new.
say_hello
3)、在数组或哈希表字面量里,用于分隔各元素的逗号
[1,2,3] 或{x=>1,y=>1}
插入如下换行:
[1,
2,
3]
{x=>1,
y=>1}
以上两种情况不会出现问题
4)、可以用一个"\"来对换行符进行转义,这样就可以避免Ruby自动终结该语句了:
var total=first_long_variable_name+second_long_variable_name \
+third_long_variable_name # note no statement terminator above
在Ruby 1.9里,关于语句终结符的规则发生了一点小变化:如果一行代码的第一个非空白的字符是一个句点,那么这一行将被当成上一行的延续,而且在该行语句之前的那个换行符将不被当作语句终结符。
animals=Array.new
.push("dog") #ruby 1.8 中不行
.push("cow")
.push("cat")
.sort


2、空格符与方法调用
Ruby的语法允许在特定环境下与方法调用相关的圆括号可以被省略,这使Ruby的方法使用起来就好象它们是语句一样。
优雅性??
危害性??相辅相成
f(3+2)+1
f (3+2)+1
难道这两者有区别?空格不被忽略
----------------------------------------
是有区别的在Ruby中, f(3+2)+1将(3+2)的结果5传递给方法f,然后结果上加1.
而f (3+2)+1则为:方法名后面有空格,在空格符之后出现的圆括号括起来的表达式3+2,先计算,然后将(3+2)+1的结果传给函数f

f(3+2)+1  =>相当于f(5)+1
f (3+2)+1 =>相当于f(6)
其中的区别,这样说来就明显了。

如果在执行代码时使用 -w 参数开启警告,Ruby将在它碰到具有二义性的代码时发出警告。
解决方案:
× 永远不要在方法名和其后的左圆括号之间留白
× 如果一个方法的第一个参数以圆括号开头,那么在此方法的调用中,请一直使用圆括号,比如f((3+2)+1)
×   请一直使用Ruby解释器的-w选项,这样它就会在你忘记了上述规则时发出警告。

分享到:
评论

相关推荐

    ruby-debug-ide

    《深入理解Ruby调试工具:ruby-debug-ide》 在Ruby编程世界中,高效的问题排查与代码调试是开发者必备的技能之一。ruby-debug-ide正是这样一个强大的调试接口,它为Ruby开发环境提供了集成的调试支持,使得开发者...

    src-oepkgs/ruby-ruby2ruby

    src-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2...

    ruby-irb-1.8.7.352-13.el6.x86_64.rpm

    ruby-irb-1.8.7.352-13.el6.x86_64.rpm ruby-irb-1.8.7.352-13.el6.x86_64.rpm

    ruby-1.8.7-p302.tar.gz

    Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言,在20世纪90年代由日本人松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。...该版本为ruby-1.8.7-p302

    hw-ruby-intro.zip_SaaS软件工程_hw-ruby-intro_ruby _ruby 中文_saas

    5. **作业代码分析**:“hw-ruby-intro”中的代码可能是解决特定SaaS场景的实例,比如用户管理、计费系统、API集成等。通过分析和理解这段代码,学生可以深入理解如何将Ruby语言特性应用于实际的SaaS解决方案中。 6...

    ruby-oracle相关的数据库操作的gems包

    5. `ruby-oci8-1.0.7.gem`:更早的版本,同样未指定平台。 6. `ruby-oci8-1.0.7-x86-mswin32-60.gem`:专为Windows上的Ruby 1.9.x编译的版本。 7. `ruby-oci8-2.1.0.tar.gz` 和 `ruby-oci8-2.0.6.tar.gz`:源代码包...

    ruby-runtime手动插件.zip

    该压缩包文件 "ruby-runtime.hpi" 是 Jenkins 插件的标准格式,扩展名为 ".hpi"(Jenkins Plugin Installable Unit)。HPI 文件可以直接上传到 Jenkins 管理界面的“管理插件”部分进行安装。安装完成后,你可以在 ...

    ruby-2.5.3-x64 下载

    标题中的"ruby-2.5.3-x64"指的是Ruby语言的特定版本,2.5.3,这是一个64位的构建。Ruby的版本迭代频繁,每个新版本通常会包含性能优化、新的特性和错误修复。2.5.3是2018年发布的一个稳定版本,它带来了诸如改进的...

    Ruby-GNOME2.zip

    Ruby-GNOME2提供GNOME 2.0开发环境的Ruby绑定,目前在活跃更新中。如果你喜欢GTK的界面,你一定会喜欢Ruby-GNOME2。GTK目前提供Linux、 Windows等多个平台的运行库,也就是说使用GTK开发的应用程序可以在多个平台下...

    ruby-2.4.3.tar.gz

    在这个场景中,"ruby-2.4.3.tar.gz"是一个压缩包,其中包含了Ruby 2.4.3的源代码。这个版本是在2017年发布的,相比CentOS 6.x默认的Ruby版本,它提供了更多的改进和新特性。Ruby 2.4系列引入了性能优化、新的语法糖...

    ruby-1.9.3-p547.tar.gz

    在本压缩包"ruby-1.9.3-p547.tar.gz"中,包含的是Ruby语言的一个特定版本——1.9.3-p547。 Ruby 1.9.3是Ruby的一个重要版本,发布于2012年,它带来了许多性能提升和新特性。这个版本对Ruby的语法进行了改进,包括更...

    Ruby-RubyJMeter一个基于Ruby的DSL用于构建JMeter测试计划

    Ruby-JMeter是一个强大的工具,它将Ruby编程语言与Apache JMeter测试框架相结合,为性能测试和负载测试提供了灵活且易于使用的领域特定语言(DSL)。这个工具使得测试人员和开发者能够用Ruby编写JMeter测试计划,...

    ruby-2.4.5.tar.gz

    解压`ruby-2.4.5.tar.gz`后,你会得到一个名为`ruby-2.4.5`的目录,其中包含了Ruby源代码的所有文件和子目录。这些文件可能包括但不限于: 1. `README`: 提供关于该版本的基本信息和安装指南。 2. `INSTALL`: 包含...

    ruby-debug-1.87.rar

    《Ruby调试工具:ruby-debug-1.87详解》 Ruby是一种动态、开源的编程语言,以其简洁的语法和强大的元编程能力深受开发者喜爱。在开发过程中,调试是必不可少的一环,而`ruby-debug-1.87`就是Ruby社区中广泛使用的...

    ruby-1.9.2-p290.tar.gz

    标题中的"ruby-1.9.2-p290.tar.gz"是一个开源编程语言Ruby的特定版本的归档文件,采用流行的tar和gzip格式进行压缩。这个版本是Ruby的1.9.2分支的一个更新点,标记为p290,意味着它是该分支的第290个补丁级别。在...

    ruby-2.2.0.tar.gz

    Ruby-2.2.0是Ruby编程语言的一个版本,它是一个强大的、动态的、面向对象的脚本语言,以其简洁的语法和强调程序员生产力而受到欢迎。Ruby在20世纪90年代由日本的松本行弘(Yukihiro Matsumoto)创建,它的设计哲学是...

    ruby-2.5.8.tar.gz

    - 解压`ruby-2.5.8.tar.gz`:使用`tar -zxvf ruby-2.5.8.tar.gz`命令解压。 - 编译与安装:进入解压后的目录,运行`./configure`,然后`make`和`make install`进行编译和安装。 - 验证安装:通过`ruby -v`检查...

    ruby-2.2.4.tar.gz、rubygems-2.6.2.zip、redis-3.2.2.gem

    `ruby-2.2.4.tar.gz`需要先解压,然后通过`configure`脚本和`make`命令编译安装。`rubygems-2.6.2.zip`解压后执行安装脚本来安装。Redis则通过`gem install redis-3.2.2.gem`来安装其客户端库。配置Redis服务,用户...

    mingw32-ruby-1.9.1-wxruby-2.0.1-setup.exe

    mingw32-ruby-1.9.1-wxruby-2.0.1-setup.exe

    ruby-2.6.5.tar.gz

    在终端中输入`tar -zxvf ruby-2.6.5.tar.gz`,这会创建一个名为`ruby-2.6.5`的目录,包含所有源代码。 2. **进入目录**:使用`cd`命令进入新解压的目录,如`cd ruby-2.6.5`。 3. **配置**:运行`./configure`脚本...

Global site tag (gtag.js) - Google Analytics