Ruby 单行注释用 #,没有 /* */ 这样的多行注释方式,但是可以用文档注释方式来进行多行注释:
=begin 注释描述
中间的都是注释内容
=end
文档注释,像 Java 的 Javadoc, .net 的 ndoc,Ruby 也有 rdoc,Ruby 的 文档注释是也是在 method,class 和 module 定义之前进行注释的,注释的内容给 rdoc 生成 HTML 帮助文档,也给 ri 用的。也有一套语法,用 # = Headings 这样的语法,还支持些 HTML 代码。
Ruby 看到全大写的标识符,如 PI,还有像 LikeThis 或 LIKE_THIS 这样的标识符就认为是常量,对它们重新赋值就会告警:
warning: already initialized constant LikeThis
命名成 like_this 就是变量,这也是 Ruby 的约定优于配置,常量就是大写命名。
Ruby 是大小写敏感形的,我所接触的也就是 Bill 的 Basic 是大小写不敏感的。
和 Java 一样,Ruby 的变量、方法、类、模块等都支持用 Unicode 字符,比如变量 名字="Unmi"; puts 名字
但是对于常量来说还是必须以 ASCII 的大写字母开始的。
特殊符号的应用,在前面也有讲到,主要是 $ @ ? ! = 这几个符号的约定:
$ 以它为前缀的常代表全局变量,例如像 Perl 一样,有许多内置的变量用 $_、$~、$@、$& ... 这些来表示,它们可以在代码中直接引用。
@ 实例变量前加一个 @,类变量前加两个,即 @@
? 一般在返回 Boolean 的方法名会加 ? 后缀,empty?
! 后缀为 ! 的方法提醒你可要注意啦,它的返回值是可变的,而不是个拷贝,可以通过返回值修改内部状态。
= 以等号结尾的方法调用时可转换为赋值操作,如调用方法 o.m=(v) 转换成赋值形式就是 o.m=v
在 Ruby 中也可以直接使用像 C/C++ 中的两个"宏定义",如
puts __LINE__ #输出当前的执行行号
puts __FILE__ #输出当前执行的文件全路径
Ruby 通常用换行来作为语句的终结,像 C/Java 一样可以用分号来作为语句的终结,但在 Ruby 中一般只会用分号来分隔一行上的多个语句,其他时候多不会去分号。
Ruby 也需要智能的去推断新行是否就是开始了新的语句,例如,在新的一行前的语句是完整的,下一行将是新的语句,否则两行将会一同解析,这要求你自己谨慎些。
如:
1 2 3 4 |
x=y=3 total = x + #这行未结束,Ruby 会认为 toal = x + y 是一起的 y puts total #输出 6 |
而:
1 2 3 4 |
x=y=3 total = x #由于 total = x 是完整的,所以这里是两行语句 +y #这行虽无意义,也是完整的语句 puts total #输出 3 |
还有 return 和 break 语句时需要注意这样 情况
但是你可以放心的在操作符、点号、方法调用时的逗号(分隔参数)、声明数组或哈稀时加换行,它不会终结上行的语句。
再保险些就是长语句想要写在多行时,又怕被误认为多行,就用反斜线分隔,如:
1 2 |
var total = x \ #将会把下一行接续过来,即 total = x + y +y |
在 Ruby 1.9 之后有一个规则就是,凡是新行的第一个非空字符为点号,就会接续到上一行去,像方法的链式调用:
1 2 3 4 |
animals = Array.new .push("dog") .push("cow") .sort |
Ruby 允许在方法调用时省略括号,这也是 Ruby 优雅的一种体现,让方法调用看起来像是个普通语句,但却会带来一个有害的空格依赖,像下面的两个语句就知道了:
1 2 |
f(3+2)+1 #方法调用 f(3+2) 的结果加上 1 f (3+2)+1 #(3+2)+1 的结果作为 f 的方法参数 |
第一个语句不会有歧义的,就是方法调用后的结果加 1,第一个语句,如果有 -w 打开的警告就报告:
warning: don't put space before argument parentheses
解决办法就也就是不要在方法名和括号间加留用空格,如果再有分不清的就别省略了括号。
本文链接 https://yanbin.blog/close-to-ruby-world-5/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。