Ruby的注释以#开头,并持续到该行结束。Ruby没有/*...*/的C风格注释。
如果#出现在字符串或者正则表达式的字面量里,则它是字符串或者正则表达式的一部分,而不是注释。
Ruby支持嵌入式注释,以=begin开头,以=end结尾。=begin和需要注释的内容之间至少要有一个空格作为分界符。=end也是如此,而且=end所在行,整行都是被注释掉的。=必须作为该行的第一个字符出现,前面连空格或制表符都不可以有。
文档化的注释
字面量 就是直接出现在Ruby源代码中的值,包括数字、字符串、正则表达式、数组、哈希值等。
标识符 即名字。Ruby用标识符对变量、类、方法等命名。
1)可以有字母、数字、下划线组成,但不能以数字开头。
2)以大写字母开头的标识符是常量。如果修改类似的标识符,会发出警告,但不是错误。
3)类和模块名必须以大写开头,否则报错。
4)非常量多字节标识符,以下划线分割,而不是java下通常的“驼峰命名”。
Ruby是大小写敏感的。
ASCII字符集下,Ruby规定了哪些字符是有效的,哪些是无效的。ASCII字符集之外的所有字符都是Ruby标识符的有效字符。比如UTF-8中的乘号“×”。
标识符里的标点符号
1)$ 开头的变量是全局变量;
2)@ 开头的变量是实例变量;
3)@@ 开头的变量是类变量;
4)? 返回布尔值的方法的名字通常以问号结尾;
5)! 结尾的方法名,表明此方法会改变调用它的对象本身;
6)= 如果方法名以=结尾,则调用此方法时,可以省略此等号,这种方法通常被置于赋值操作符的左侧。
保留字
__LINE__ | case | ensure | not | then |
__ENCODING__ | class | false | or | true |
__FILE__ | def | for | redo | undef |
BEGIN | defined? | if | rescue | unless |
END | do | in | retry | until |
alias | else | module | return | when |
and | elseif | next | self | while |
begin | end | nil | super | yield |
break | ||||
=begin | =end | __END__ |
如果__END__单独出现在一行(没有前置或后置空白),则标示程序结束,即数据区的开始。
可以通过在保留字前加上@、@@、$,从而当做实例变量、类变量、全局变量来使用。此外还可以将关键字作为方法名,但这种方法名不能单独出现在程序中,必须通过一个对象显示的来调用。
Ruby的许多特性实际上是用Kernel、Module、Class和Object这几个类的方法来实现的。建议将以下标识符当做保留字来处理。
1) 这些方法通常用于声明或者关键字
at_exit | catch | private | require |
attr | include | proc | throw |
attr_accessor | lambda | protected | |
attr_reader | load | public | |
attr_writer | loop | raise |
2) 这些方法通常用于全局方法
Array | chomp! | gsub! | select |
Float | chop | iterator? | sleep |
Integer | chop! | load | split |
String | eval | open | sprintf |
URI | exec | p | srand |
abort | exit | sub | |
autoload | exit! | printf | sub! |
autoload! | fail | putc | syscall |
binding | fork | puts | system |
block_given? | format | rand | test |
callcc | getc | readline | trap |
caller | gets | readlines | warn |
chomp | gsub | scan |
3)这些方法通常用于对象方法
allocate | freeze | kind_of? | superclass |
clone | frozen? | method | taint |
display | hash | methods | tainted? |
dup | id | new | to_a |
enum_for | inherited | nil? | to_enum |
eql? | inspect | object_id | to_s |
equal? | instance_of? | respond_to? | untaint |
extend | is_a? | send |
空白符
1)Ruby中可以使用分号来结束语句,但通常都被省略。如果省略,则换行符被视为语句的终结。
2)如果语句分布在多行,则应注意换行符的位置。
total = x +
y
total = x
+ y
f(3+2)+1 # equals to f(5) + 1
f (3+2)+1 # equals to f(6)
块(block)是一段与迭代器相关的代码,以花括号或者do、end来分隔。(块的代码多于一行的时候,使用do、end来分隔)
3.times {print "Ruby! "}
3.times do |x|
print x
end
体(Body)是一个语句列表,如类定义体,方法体循环体等。体从不使用花括号分隔,而只使用关键字。
文件结构
1)如果含有“shebang”注释,则该注释必须出现在文件首行;
2)如果含有“coding”注释,则应该出现在“shebang”下面一行;如果没有“shebang”,则应出现在首行;
3)如果文件包含一行代码,且该行代码只包含__END__标记,且标记前后均无空白符,则Ruby解释器将停止对该文件的处理。文件余下部分可以包含任何数据,而且程序可以通过IO流对象DATA对其进行读取。
Ruby支持Unicode等其他字符集编码;1.8中需要-Ku选项,1.9中只需在文件开头加上以下注释(此注释必须用ASCII字符编写):
# coding: utf-8
1)coding后必须接一个冒号或等号,然后再接字符编码名称,该名称不能包含空格,也不能包含下划线和连字符以外的标点符号;
2)冒号和等号两边可以存在空格,字符串coding前面还可以包含任意前缀;
3)整个注释不区分大小写。
如果使用UTF-8,在Windows下最好保存的时候,选择无BOM方式。
在Windows的命令行中,要正确显示UTF-8输出,应该执行命令“chcp 65001”,并将字体改为“Lucida Console”。
JRuby 1.6.x默认情况下是和Ruby1.8兼容的,如果想要和1.9兼容,需要设置系统变量“JRUBY_OPTS=--1.9”。
通常情况下(除非调用了exit!方法),Ruby会在退出之前执行所有的END语句,以及任何用at_exit函数注册过的“关闭钩子”代码。