宽容他人,放过自己。

ruby的学习(1)

Posted on By anchoriteFili

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