Ruby
是一种的面向对象编程语言。它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)创建于1993年。
Ruby
社区www.ruby-lang.org
Ruby
的特性与 Smalltalk
、Perl
和 Python
类似。
Perl
、Python
和 Smalltalk
是脚本语言。
Smalltalk
是一个真正的面向对象语言。
Ruby
与 Smalltalk
一样,是一个完美的面向对象语言。使用 Ruby
的语法比使用 Smalltalk
的语法要容易得多。
交互式 Ruby(IRb
)为体验提供了一个 shell
。在IRb shell
内,您可以逐行立即查看解释结果。
这个工具会随着 Ruby
的安装自动带有,所以不需要做其他额外的事情,IRb
即可正常工作。
只需要在命令提示符中键入 irb
,一个交互式 Ruby Session
将会开始,如下所示:
$irb
irb 0.6.1(99/09/16)
irb(main):001:0> def hello
irb(main):002:1> out = "Hello World"
irb(main):003:1> puts out
irb(main):004:1> end
nil
irb(main):005:0> hello
Hello World
nil
irb(main):006:0>
# -*- coding: UTF-8 -*-
或者#coding=utf-8
,告诉解释器使用utf-8
来解析源码。utf-8
。选项 | 描述 |
---|---|
-a | 与 -n 或 -p 一起使用时,可以打开自动拆分模式(auto split mode)。请查看 -n 和 -p 选项。 |
-c | 只检查语法,不执行程序 |
-C dir | 在执行前改变目录(等价于 -X) |
-d | 启用调试模式(等价于 -debug) |
-F pat | 指定 pat 作为默认的分离模式($;) |
-e prog | 指定 prog 作为程序在命令行中执行。可以指定多个 -e 选项,用来执行多个程序。 |
-h | 显示命令行选项的一个概览。 |
-i [ ext] | 把文件内容重写为程序输出。原始文件会被加上扩展名 ext 保存下来。如果未指定 ext,原始文件会被删除。 |
-I dir | 添加 dir 作为加载库的目录。 |
-K [ kcode] | 指定多字节字符集编码。e 或 E 对应 EUC(extended Unix code),s 或 S 对应 SJIS(Shift-JIS),u 或 U 对应 UTF-8,a、A、n 或 N 对应 ASCII。 |
-l | 启用自动行尾处理。从输入行取消一个换行符,并向输出行追加一个换行符 |
-n | 把代码放置在一个输入循环中(就像在 while gets; … end 中一样)。 |
-0[ octal] | 设置默认的记录分隔符($/)为八进制。如果未指定 octal 则默认为 \0 |
-p | 把代码放置在一个输入循环中。在每次迭代后输出变量 $_ 的值 |
-r lib | 使用 require 来加载 lib 作为执行前的库 |
-s | 解读程序名称和文件名参数之间的匹配模式 -xxx 的任何参数作为开关,并定义相应的变量 |
-T [level] | 设置安全级别,执行不纯度测试(如果未指定 level,则默认值为 1) |
-v | 显示版本,并启用冗余模式。 |
-w | 启用冗余模式。如果未指定程序文件,则从 STDIN 读取 |
-x [dir] | 删除 #!ruby 行之前的文本。如果指定了 dir,则把目录改变为 dir |
-X dir | 在执行前改变目录(等价于 -C) |
-y | 启用解析器调试模式 |
–copyright | 显示版权声明。 |
–debug | 启用调试模式(等价于 -d)。 |
–help | 显示命令行选项的一个概览(等价于 -h) |
–version | 显示版本。 |
–verbose | 启用冗余模式(等价于 -v)。设置 $VERBOSE 为 true。 |
–yydebug | 启用解析器调试模式(等价于 -y)。 |
单字符的命令行选项可以组合使用。下面两行表达了同样的意思:
$ ruby -ne 'print if /Ruby/' /usr/share/bin
$ ruby -n -e 'print if /Ruby/' /usr/share/bin
变量 | 描述 |
---|---|
DLN_LIBRARY_PATH | 动态加载模块搜索的路径。 |
HOME | 当没有参数传递给 Dir::chdir 时,要移动到的目录。也用于 File::expand_path 来扩展 “~”。 |
LOGDIR | 当没有参数传递给 Dir::chdir 且未设置环境变量 HOME 时,要移动到的目录。 |
PATH | 执行子进程的搜索路径,以及在指定 -S 选项后,Ruby 程序的搜索路径。每个路径用冒号分隔(在 DOS 和 Windows 中用分号分隔)。 |
RUBYLIB | 库的搜索路径。每个路径用冒号分隔(在 DOS 和 Windows 中用分号分隔)。 |
RUBYLIB_PREFIX | 用于修改 RUBYLIB 搜索路径,通过使用格式 path1;path2 或 path1path2,把库的前缀 path1 替换为 path2。 |
RUBYOPT | 传给 Ruby 解释器的命令行选项。在 taint 模式时被忽略(其中,$SAFE 大于 0)。 |
RUBYPATH | 指定 -S 选项后,Ruby 程序的搜索路径。优先级高于 PATH。在 taint 模式时被忽略(其中,$SAFE 大于 0)。 |
RUBYSHELL | 指定执行命令时所使用的 shell。如果未设置该环境变量,则使用 SHELL 或 COMSPEC。 |
对于 Unix
,使用 env
命令来查看所有环境变量的列表。
HOSTNAME=ip-72-167-112-17.ip.secureserver.net
RUBYPATH=/usr/bin
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
SSH_CLIENT=122.169.131.179 1742 22
SSH_TTY=/dev/pts/1
USER=amrood
JRE_HOME=/usr/java/jdk/jre
J2RE_HOME=/usr/java/jdk/jre
PATH=/usr/local/bin:/bin:/usr/bin:/home/guest/bin
MAIL=/var/spool/mail/guest
PWD=/home/amrood
INPUTRC=/etc/inputrc
JAVA_HOME=/usr/java/jdk
LANG=C
HOME=/root
SHLVL=2
JDK_HOME=/usr/java/jdk
LOGDIR=/usr/log/ruby
LOGNAME=amrood
SSH_CONNECTION=122.169.131.179 1742 72.167.112.17 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
RUBYLIB=/usr/lib/ruby
G_BROKEN_FILENAMES=1
_=/bin/env
在 Ruby 代码中的空白字符,如空格和制表符一般会被忽略,除非当它们出现在字符串中时才不会被忽略。然而,有时候它们用于解释模棱两可的语句。当启用-w
选项时,这种解释会产生警告。
a + b 被解释为 a+b (这是一个局部变量)
a +b 被解释为 a(+b) (这是一个方法调用)
Ruby 把分号和换行符解释为语句的结尾。但是,如果 Ruby 在行尾遇到运算符,比如 +、- 或反斜杠,它们表示一个语句的延续。
标识符是变量、常量和方法的名称。Ruby 标识符是大小写敏感的。这意味着 Ram 和 RAM 在 Ruby 中是两个不同的标识符。
Ruby 标识符的名称可以包含字母、数字和下划线字符( _ )。
下表列出了 Ruby 中的保留字。这些保留字不能作为常量或变量的名称。但是,它们可以作为方法名。
BEGIN | do | next | then |
---|---|---|---|
END | else | nil | true |
alias | elsif | not | undef |
and | end | or | unless |
begin | ensure | redo | until |
break | false | rescue | when |
case | for | retry | while |
class | if | return | while |
def | in | self | FILE |
defined? | module | super | LINE |
“Here Document” 是指建立多行字符串。在 <<
之后,您可以指定一个字符串或标识符来终止字符串,且当前行之后直到终止符为止的所有行是字符串的值。
如果终止符用引号括起,引号的类型决定了面向行的字符串类型。请注意<<
和终止符之间必须没有空格。
下面是不同的实例:
#!/usr/bin/ruby -w
# -*- coding : utf-8 -*-
print <<EOF
这是第一种方式创建here document 。
多行字符串。
EOF
print <<"EOF"; # 与上面相同
这是第二种方式创建here document 。
多行字符串。
EOF
print <<`EOC` # 执行命令
echo hi there
echo lo there
EOC
print <<"foo", <<"bar" # 您可以把它们进行堆叠
I said foo.
foo
I said bar.
bar
产生以下结果
这是第一种方式创建here document 。
多行字符串。
这是第二种方式创建here document 。
多行字符串。
hi there
lo there
I said foo.
I said bar.
语法
BEGIN {
code
}
声明 code
会在程序运行之前被调用。
实例
#!/usr/bin/ruby
puts "这是主 Ruby 程序"
BEGIN {
puts "初始化 Ruby 程序"
}
这将产生以下结果:
初始化 Ruby 程序
这是主 Ruby 程序
语法
END {
code
}
声明 code
会在程序的结尾被调用。
实例
#!/usr/bin/ruby
puts "这是主 Ruby 程序"
END {
puts "停止 Ruby 程序"
}
BEGIN {
puts "初始化 Ruby 程序"
}
这将产生以下结果:
初始化 Ruby 程序
这是主 Ruby 程序
停止 Ruby 程序
注释会对 Ruby
解释器隐藏一行,或者一行的一部分,或者若干行。您可以在行首使用字符( # ):
# 我是注释,请忽略我。
或者,注释可以跟着语句或表达式的同一行的后面:
name = "Madisetti" # 这也是注释
您可以注释多行,如下所示:
# 这是注释。
# 这也是注释。
# 这也是注释。
# 这还是注释。
下面是另一种形式。这种块注释会对解释器隐藏 =begin/=end
之间的行:
=begin
这是注释。
这也是注释。
这也是注释。
这还是注释。
=end