- Ruby 命令行选项
- Ruby 环境变量
- Ruby 程序中的空白
- Ruby 程序中的行尾
- Ruby 标识符
- 保留字
- Ruby 中的 Here Document
- Ruby BEGIN 语句
- Ruby END 语句
- Ruby 注释
- Ruby 数据类型
- 算数操作
- 字符串类型
- 数组
- 哈希类型
- 范围类型
Ruby 命令行选项
选项 | 描述 |
---|---|
-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 环境变量
Ruby 解释器使用下列环境变量来控制它的行为。ENV 对象包含了所有当前设置的环境变量列表。
变量 | 描述 |
---|---|
DLN_LIBRARY_PATH | 动态加载模块搜索的路径 |
HOME | 当没有参数传递给 Dir::chdir 时,要移动到目录。也用于 File::expand_path 来扩展 “~”。 |
LOGDIR | 当没有参数传递给Dir::chdir 且未设置 |
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。 |
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 程序中的空白
在 Ruby 代码中的空白字符,如空格和制表符一般会被忽略,除非当它们出现在字符串中时才不会被忽略。然而,有时候它们用于解释模棱两可的语句。当启用 -w 选项时,这种解释会产生警告。
a + b 被解释为 a+b (这是一个局部变量)
a +b 被解释为 a(+b) (这是一个方法调用)
Ruby 程序中的行尾
Ruby 把分号和换行符解释为语句的结尾。但是,如果 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_ |
Ruby 中的 Here Document
“Here Document”是指建立多行字符串。在 « 之后,您可以指定一个字符串或标识符来终止字符串,且当前行之后知道终止符为止的所有行是字符串的值。 如果终止符用引号括起,引号的类型决定了面向行的字符串类型。请注意«和终止符之间必须没有空格。
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
Ruby BEGIN 语句
BEGIN {
code
}
声明 code 会在程序运行之前被调用。
示例:
puts "这是主 Ruby 程序"
BEGIN {
puts "初始化 Ruby 程序" # 先运行此方法
}
Ruby END 语句
END {
code
}
声明 code 会在程序的结尾被调用
puts "这是主 Ruby 程序"
END {
puts "停止 Ruby 程序" # 最后执行方法
}
BEGIN {
puts "初始化 Ruby 程序"
}
Ruby 注释
# 单行注释
=begin
多
行
注
释
=end
Ruby 数据类型
Ruby 支持的数据类型包括基本的Number、String、Ranges、Symbols,以及true、false和nil这几个特殊值,同时还有两种重要的数据结构 – Array和Hash.
字面量(literal): 代码中能见到的值,数值,bool值,字符串等都叫字面量。
算数操作
# 指数算数
puts 2**(1/4) # 1与4的商为0,然后2的0次方为1
puts 16**(1/4.0) # 1与4.0的商为0.25(四分之一),然后开四次方根。
=begin
结果:
1
2.0
=
字符串类型
双引号标记的字符串允许替换和使用反斜线符号,单引号标记的字符串不允许替换,且只允许使用\和'两个反斜线符号。
puts 'escape using "\\"';
puts 'That\'s right';
=begin
escape using "\"
That's rightv bb
=end
puts "相乘 :#{24*60*60}" # 你可以使用序列 #{ expr } 替换任意 Ruby 表达式的值为一个字符串。
name="Ruby"
puts name
puts "#{name+",ok"}"
数组
ary = [ "fred", 10, 3.14, "This is a string", "last element",]
ary.each do |i|
puts i
end
=begin
fred
10
3.14
This is a string
last element
=end
哈希类型
Ruby 哈希是在大括号内放置一系列键/值对,键和值之间使用逗号和序列 => 分隔。尾部的逗号会被忽略。
hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
hsh.each do |key, value|
print key, " is ", value, "\n"
end
=begin
结果:
red is 3840
green is 240
blue is 15
=end
范围类型
一个范围表示一个区间 范围是通过设置一个开始值和一个结束值来表示。范围可使用s..e和s…e来构造,或者通过 Range.new 来构造。 (1..5)意味着它包含值1,2,3,4,5, (1…5)意味着它包含值1,2,3,4.
(10..15).each do |n|
print n, ' '
end
# 结果:10 11 12 13 14 15