手册简介:
Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。
由 Ruby 语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的 Ruby 语言替代品。
Ruby的作者于1993年2月24日开始编写Ruby,直至1995年12月才正式公开发布于fj(新闻组)。
因为Perl发音与6月诞生石pearl(珍珠)相同,
因此Ruby以7月诞生石ruby(红宝石)命名。
C#的命名则是乐理中的C音符升半度而来
手册说明:
官网:http://www.ruby-lang.org/en/
API文档:http://www.ruby-lang.org/en/documentation/
下载:http://www.ruby-lang.org/en/downloads/
发展历程
Ruby明显比其他类似的编程语言(如Perl或Python)年轻,又因为Ruby是日本人发明的,所以早期的非日文资料和程序都比较贫乏,所以在网上仍然可以找到类似“Ruby的资料太少”之类的批评。约于2000年,Ruby开始进入美国,英文的资料开始发展。Ruby 标识
2011年10月31日1.9.3的第一个稳定版本1.9.3p0发布。
2013年2月22日发布了Ruby 1.9.3-p392。
2013年2月24日发布了Ruby 2.0.0-p0。
2015年4月13日发布了Ruby 2.2.2。
2015年12月25日发布了Ruby 2.3.0。
语言标准
Ruby的变量有一定的规则,已经定义的类可以在运行时修改
Ruby是动态语言,你可以在程序中修改先前定义过的类。
class Girl
def showCup
"generalmethod_showCup"
end
end
loli=Girl.new
def loli.showCup
"no cup for this loli instance."
end
loli.showCup#specialcupforthisloliinstance
使用Ruby可以写出简短而又功能强大的代码
下面的方法用来完成两个矩阵的乘积???Excuse Me???
def matrix_mul(matrix1,matrix2)
result=[]
(0...matrix1.length).each{|i|
temp=[]
(0...matrix2[0].length).each{|j|
tmp=0
(0...matrix1[0].length).each{|k|
tmp+=matrix1[i][k]*matrix2[k][j]
}
temp<<tmp
}
result<<temp
}
return result
end
注:ruby标准库中已包含矩阵库 Matrix
语言特点
完全面向对象在Ruby语言中,任何东西都是对象,包括其他语言中的基本数据类型,比如整数
变量没有类型
Ruby的变量可以保存任何类型的数据。
任何东西都有值
不管是数学或者逻辑表达式还是一个语句,都会有值。
ruby语言很优雅,可以做到不需要注释就可以读懂。吹牛>_<
Ruby优点
语法简单普通的面向对象功能(类,方法调用等)
特殊的面向对象功能(Mixin,特殊方法等)
操作符重载(类似C++,C#)
错误处理功能
迭代器和闭包(类似JS,Swift)
垃圾回收
动态载入(取决于系统架构)
可移植性高.不仅可以运行在多数UNIX上,还可以运行在DOS,Windows,Mac,BeOS等平台上
适合于快速开发,一般开发效率是JAVA的5倍
语言理念
减少编程时候的不必要的琐碎时间,令编写程序的人高兴,是设计 Ruby 语言的 Matz 的一个首要的考虑;
“ 人们特别是电脑工程师们,常常从机器着想。他们认为:‘这样做,机器就能运行的更快;这样做,机器运行效率更高;这样做,机器就会怎样怎样怎样。’
遵循上述的理念,Ruby 语言通常非常直观,按照编程人认为它应该的方式运行。
Ruby 是完全面向对象的:
下面是一个在标准输出设备上输出Hello World的简单程序,
#!/usr/bin/env ruby
puts "Hello, world!"
语言用途
- Ruby 是开源的,在Web 上免费提供,但需要一个许可证。
- Ruby 是一种通用的、解释的编程语言。
- Ruby 是一种真正的面向对象编程语言。
- Ruby 是一种类似于 Python 和 Perl 的服务器端脚本语言。
- Ruby 可以用来编写通用网关接口(CGI)脚本。
- Ruby 可以被嵌入到超文本标记语言(HTML)。
- Ruby 语法简单,这使得新的开发人员能够快速轻松地学习 Ruby。
- Ruby 与 C++ 和 Perl 等许多编程语言有着类似的语法。
- Ruby 可扩展性强,用 Ruby 编写的大程序易于维护。
- Ruby 可用于开发的 Internet 和 Intranet 应用程序。
- Ruby 可以安装在 Windows 和 POSIX 环境中。
- Ruby 支持许多 GUI 工具,比如 Tcl/Tk、GTK 和 OpenGL。
- Ruby 可以很容易地连接到 DB2、MySQL、Oracle 和 Sybase。
- Ruby 有丰富的内置函数,可以直接在 Ruby 脚本中使用。
发明人
松本行弘"Matz"(Yukihiro Matsumoto)是Ruby语言的发明人,他从1993年起便开始着手Ruby的研发工作。他一直想发明一种语言,使你既能进行高效开发又能享受编程的快乐。1993年2月24日Ruby诞生了,1995年12月Matz推出了Ruby的第一个版本Ruby 0.95。不久Ruby便凭借其独特的魅力横扫日本。Ruby 语言
编译/执行 Ruby 程序
对于大多数编程语言,第一个入门实例便是 "Hello World!",下面的实例使用 Ruby 输出 "Hello World!":
puts "Hello World!";
或者是在irb交互式命令行的模式下
>>puts "Hello, world!" Hello, world! => nil
Ruby 简介
Ruby是一种纯粹的面向对象编程语言。它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)创建于1993年。
您可以在 www.ruby-lang.org 的 Ruby 邮件列表上找到松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)的名字。在 Ruby 社区,松本也被称为马茨(Matz)。
Ruby 是"程序员的最佳朋友"。
Ruby 的特性与 Smalltalk、Perl 和 Python 类似。
Perl、Python 和 Smalltalk 是脚本语言。
Smalltalk 是一个真正的面向对象语言。
Ruby,与 Smalltalk 一样,是一个完美的面向对象语言。使用 Ruby 的语法比使用 Smalltalk 的语法要容易得多。
您需要的工具
为了执行本教程中讨论的实例,您需要 RAM 至少为 2GB(推荐为 4GB)的 Intel Core i3 或 i5 的计算机。您还需要以下软件:
- Linux 或 Windows 95/98/2000/NT 或 Windows 7 以上操作系统
- Apache 1.3.19-5或以上 Web 服务器
- Internet Explorer 5.0 或以上的 Web 浏览器
- Ruby 1.8.5或以上
本教程将介绍如何使用 Ruby 创建 GUI、网络和 Web 应用程序。另外还会讨论如何扩展和嵌入 Ruby 应用程序。
接下来将学习什么?
下一章将向您介绍从哪里可以获取 Ruby 及其文档。最后,它会指示您如何安装 Ruby,并配置环境为开发 Ruby 应用程序做准备。
Ruby 环境
本地环境设置
如果您想要设置 Ruby 编程语言的环境
Linux/Unix 上的 Ruby 安装:如果您想要在 Linux/Unix 上配置开发环境,那么请查看本章节的内容。
Ruby 命令行选项:本章节列出了所有的命令行选项,您可以和 Ruby 解释器一起使用这些命令行选项。
Ruby 环境变量:本章节列出了所有重要的环境变量列表,设置这些环境变量以便让 Ruby 解释器工作。
流行的 Ruby 编辑器
为了编写 Ruby 程序,您需要一个编辑器:
- 如果您是在 Windows 上进行编写,那么您可以使用任何简单的文本编辑器,比如 Notepad++ 或 Edit plus。
- VIM(Vi IMproved)是一个简单的文本编辑器,几乎在所有的 Unix 上都是可用的,现在也能在 Windows 上使用。另外,您还可以使用您喜欢的 vi 编辑器来编写 Ruby 程序。
交互式 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 showGirlCup irb(main):002:1> cup = "girl's cup is F" irb(main):003:1> puts cup irb(main):004:1> end nil irb(main):005:0> showGirlCup girl's cup is F nil irb(main):006:0>
这里您可以先不用关心上面命令的执行内容,我们将在后续的章节中向您讲解。
接下来将学习什么?
假设现在您已经设置好 Ruby 环境,且已经做好编写第一个 Ruby 程序的准备。下一章我们将向您讲解如何编写 Ruby 程序。
附:Ruby 安装 - Unix
下面列出了在 Unix 机器上安装 Ruby 的步骤。
注意:在安装之前,请确保您有 root 权限。
- 下载最新版的 Ruby 压缩文件。请点击这里下载。
- 下载 Ruby 之后,解压到新创建的目录下:
$ tar -xvzf ruby-2.2.3.tgz $ cd ruby-2.2.3
- 现在,配置并编译源代码,如下所示:
$ ./configure $ make $ sudo make install
- 安装后,通过在命令行中输入以下命令来确保一切工作正常:
$ruby -v ruby 2.2.3……
- 如果一切工作正常,将会输出所安装的 Ruby 解释器的版本,如上所示。如果您安装了其他版本,则会显示其他不同的版本。
自动安装 Ruby
如果您的计算机已经连接到 Internet,那么最简单安装 Ruby 的方式是使用 yum 或 apt-get。
$ sudo yum install ruby # CentOS, Fedora, 或 RHEL 系统 或 sudo apt-get install ruby-full # Debian 或 Ubuntu 系统
如果你是苹果系统,可以使用 brew 命令安装:
$ brew install ruby
在命令提示符中输入以下的命令,即可在您的计算机上安装 Ruby。
Ruby 命令行选项
Ruby 一般是从命令行运行,方式如下:
$ ruby [ options ] [.] [ programfile ] [ arguments ... ]
解释器可以通过下列选项被调用,来控制解释器的环境和行为。
选项 | 描述 |
---|---|
-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 则默认为 。 |
-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 环境变量
Ruby 解释器使用下列环境变量来控制它的行为。ENV 对象包含了所有当前设置的环境变量列表。
变量 | 描述 |
---|---|
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 输出 "Hello, Beyond!",英文没有问题,但是如果你输出中文字符"妳好,二次元"就有可能会碰到中文编码问题。
Ruby 文件中如果未指定编码,在执行过程会出现报错:
#!/usr/bin/ruby -w puts "妳好,二次元!";
以上程序执行输出结果为:
invalid multibyte char (US-ASCII)
以上出错信息显示了 Ruby 使用用 ASCII 编码来读源码,中文会出现乱码,
解决方法为只要在文件开头加入
# -*- coding: UTF-8 -*-(EMAC写法)
或者
#coding=utf-8 就行了。
实例
# -*- coding: UTF-8 -*-
#coding=utf-8
puts "妳好,二次元!";
输出结果为:
妳好,二次元!
所以如果大家再学习过程中,源代码文件中,若包含中文编码,则需要注意两点:
- 1. 必须在首行添加 # -*- coding: UTF-8 -*-,告诉解释器使用utf-8来解析源码。
- 2. 必须设置编辑器保存文件的编码为utf-8。
Ruby 语法
让我们编写一个简单的 Ruby 程序。所有的 Ruby 文件扩展名都是 .rb。所以,把下面的源代码放在 ruby_01.rb 文件中。
实例
puts "Hello, Beyond!";
在这里,假设您的 /usr/bin 目录下已经有可用的 Ruby 解释器。现在,尝试运行这个程序,如下所示:
$ ruby ruby_01.rb
这将会产生下面的结果:
Hello, Beyond!
您已经看到了一个简单的 Ruby 程序,下一章节将让我们看看一些 Ruby 语法相关的基本概念:
未完待续,下一章节,つづく