Ruby入门学习笔记

Ruby 简介

Ruby是一种的面向对象编程语言。它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)创建于1993年。
Ruby 社区www.ruby-lang.org
Ruby 的特性与 SmalltalkPerlPython 类似。
PerlPythonSmalltalk 是脚本语言。
Smalltalk 是一个真正的面向对象语言。
RubySmalltalk 一样,是一个完美的面向对象语言。使用 Ruby 的语法比使用 Smalltalk 的语法要容易得多。

交互式 Ruby(IRb)

交互式 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>

Ruby 中文编码解决方案

  1. 必须在首行添加 # -*- coding: UTF-8 -*-或者#coding=utf-8,告诉解释器使用utf-8来解析源码。
  2. 必须设置编辑器保存文件的编码为utf-8

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 -ne 'print if /Ruby/' /usr/share/bin
$ ruby -n -e 'print if /Ruby/' /usr/share/bin

Ruby环境变量

变量 描述
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 语法

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” 是指建立多行字符串。在 <<之后,您可以指定一个字符串标识符来终止字符串,且当前行之后直到终止符为止的所有行是字符串的值。
如果终止符用引号括起,引号的类型决定了面向行的字符串类型。请注意<<和终止符之间必须没有空格。
下面是不同的实例:

#!/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.

Ruby BEGIN 语句

语法

BEGIN {
   code
}

声明 code 会在程序运行之前被调用。

实例

#!/usr/bin/ruby
 
puts "这是主 Ruby 程序"
 
BEGIN {
   puts "初始化 Ruby 程序"
}

这将产生以下结果:

初始化 Ruby 程序
这是主 Ruby 程序

Ruby END 语句

语法

END {
   code
}

声明 code 会在程序的结尾被调用。

实例

#!/usr/bin/ruby
 
puts "这是主 Ruby 程序"
 
END {
   puts "停止 Ruby 程序"
}
BEGIN {
   puts "初始化 Ruby 程序"
}

这将产生以下结果:

初始化 Ruby 程序
这是主 Ruby 程序
停止 Ruby 程序

Ruby 注释

注释会对 Ruby解释器隐藏一行,或者一行的一部分,或者若干行。您可以在行首使用字符( # ):

# 我是注释,请忽略我。

或者,注释可以跟着语句或表达式的同一行的后面:

name = "Madisetti" # 这也是注释

您可以注释多行,如下所示:

# 这是注释。
# 这也是注释。
# 这也是注释。
# 这还是注释。

下面是另一种形式。这种块注释会对解释器隐藏 =begin/=end 之间的行:

=begin
这是注释。
这也是注释。
这也是注释。
这还是注释。
=end

你可能感兴趣的:(Ruby,Ruby)