ruby语言是什么东西
1、简介
Ruby是日本的Yukihiro Matsumoto写的,简单易学的面向对象的脚本语言,像perl一样,有丰富的文字处理、系统管理等丰富 功能,但是ruby要简单,容易理解和扩充。跟python很类似,但是在国内远没有python有名。
Ruby是一种功能强大的面向对象的脚本语言,可以使用它方便快捷地进行面向对象程序设计。与Perl类似,而且Ruby具有强大的文本处理功能,使文本处理变得简单。此外还可以方便地使用C语言来扩展Ruby的功能。
若您曾经“想要一种简单的面向对象的语言”,或者认为“Perl的功能虽然好用,但它的语法真让人受不了”,又或者觉得“LISP系列语言的思想不错,但到处都是括号真让人讨厌,最起码算式应该按照通常的样式书写”。那么,Ruby或许能让您满意。 归纳起来,Ruby有以下优点:
解释型执行,方便快捷
Ruby是解释型语言,其程序无需编译即可执行。
语法简单、优雅
语法比较简单,类似Algol系语法。
完全面向对象
Ruby从一开始就被设计成纯粹的面向对象语言,因此所有东西都是对象,例如整数等基本数据类型。
内置正则式引擎,适合文本处理
Ruby支持功能强大的字符串操作和正则表达式检索功能,可以方便的对字符串进行处理。
自动垃圾收集
具有垃圾回收(Garbage Collect,GC)功能,能自动回收不再使用的对象。不需要用户对内存进行管理。
跨平台和高度可移植性
Ruby支持多种平台,在Windows, Unix, Linux, MacOS上都可以运行。Ruby程序的可移植性非常好,绝大多数程序可以不加修改的在各种平台上加以运行。
有优雅、完善的异常处理机制
Ruby提供了一整套异常处理机制,可以方便优雅地处理代码处理出错的情况。
拥有很多高级特性
Ruby拥有很多高级特性,例如操作符重载、Mix-ins、特殊方法等等,是用这些特性可以方便地完成各种强大的功能。
一般认为,他有如下特点:
- 简单
解释型语言(インタプリタ),所以不必事先编译(コンパイル)。
变量没有类型的区分,虽然可以省去类型错误的担忧,但也会引起编译时候检查的脆弱。
变量不需要定义。
简单的语法,多从Eiffel继承而来。
不需要内存管理,系统提供GC(ガーベージコレクタ)处理机制。 - 纯的面向对象的语言
一切都是对象,像整数等类型从开始就被设计为对象来处理。
class(クラス),继承,method(メソッド)等
(特殊方法?)特異メソッド
module(モジュール)によるMixin
迭代(イテレータ)和闭包(クロージャ)。一个在闭包开始时定义的资源在闭包结束后会被释放, 适合于socket,数据库连接,文件句柄等。 - 脚本语言
解释执行
很强的文字处理能力和正则表达式
直接访问OS,用ruby编写系统程序也是可能的。 - 其他
支持多种长整数,内存允许,可以进行很大数的计算操作。
具备异常处理能力,具备java的异常处理功能。
dynamic loading(ダイナミックローディング )。可以在运行时候重定义自己, 类也可以在运行时继承/取消继承。
线程。现在的ruby已经有线程的概念,Ruby2.0好像能支持本地线程。
反射(Reflection)。Ruby可以看到程序的内部,比如一个模块是否含一个特定方法, 一个对象是哪个class等等。类似java。
扩展性。C api。
发行许可证。基于Ruby Artistic License (BSD样式的)和GPL。
2、环境安装
(1).安装1.可以从www.ruby-lang.org下载源代码进行安装。
(2).解压缩源文件,进入安装目录
#./configuremake
#make
#install
3.使用
(1). 使用irb。irb是一个交互接口,在shell里运行它,首先显示提示符,等待输入;用户输入之后,它在进行处理,把结果显示给用户。
#irb irb(main):001:0> $str="hello world!/n" => "hello world!/n" irb(main):002:0> print $str hello world! => nil irb(main):003:0> |
(2).像其他语言一样,从程序文件运行
[root@tserver /root]# chmod a+x foo.rb [root@tserver /root]# cat foo.rb #!/usr/local/bin/ruby -w puts "Hello, World!" [root@tserver /root]# ruby foo.rb Hello, World! [root@tserver /root]# ./foo.rb Hello,World! [root@tserver /root]# |
(3).Ruby使用方法
ruby [ option ...] [ -- ] [ programfile ] [ argument ...]pre>
关于Ruby的命令行参数,可以参考相关文档。
4.简单例子
def sayGoodnight(name) # Time for bed... |
可以看到,ruby的语法还是比较简单的,首先,你不必每行都写个分号, Ruby注释以#开头,直到行尾。
Methods定义以关键字def开始,接着是方法名和方法参数, ruby不需要用braces来界定程序主体,只需要关键字end就行了。
这个程序也相当简单,第一行把``Goodnight, ''加上参数name,并把它赋给了局部变量result,第二行把结果返回给调用者。注意我们不需要定义变量result。
最后我们调用了2次这个方法,并把结果传给puts函数,这个函数简单的再新行上打印传给它的参数而已,最后结果像这样:
Goodnight, John-Boy Goodnight, Mary-Ellen |
其实 puts sayGoodnight("John-Boy") 包括了2个函数调用,一个put系统函数,一个sayGoodnight函数。但是为什么puts调用没有用括号呢?实际上,下面的调用都是等价的:
puts(sayGoodnight "John-Boy") puts(sayGoodnight("John-Boy")) puts sayGoodnight("John-Boy") puts sayGoodnight "John-Boy" |
但是如果都不写括号,你知道那个参数传给谁吗?所以还是建议在方法后面加上括号,方便阅读源程序。
这个方法还展示了string对象,有很多种办法可以创建string对象,但最普通的要算用string literals了:单引号或双引号包起来的一组字符。它们的区别是ruby构建这两种字符串时要做的操作。对单引号引起来的字符串来说,ruby做的工作会很少,单引号引起来得部分就是它的值。如果是双引号引起来得,则要做多一些工作了。首先,它检查是否包含反斜线,也就是转义符,然后用适当的二进制值代替,最常见的就是"/n"了,它将会被换行替换。如:
puts "And Goodnight,/nGrandma" |
产生结果如下:
And Goodnight, Grandma |
第二件事情就是expression interpolation。#{ expression }被expression的值代替,例如,下面的方法和刚才的例子是一样的结果
def sayGoodnight(name) result = "Goodnight, #{name}" return result end |
当然我们还可以再简化这个函数。一个ruby函数返回的结果就是最后一行的值,所以这个函数也可以写成如下:
def sayGoodnight(name) "Goodnight, #{name}" end |
Ruby使用俗定的命名方式为变量命名,变量名的第一个字母标志了它的类型,是局部变量,还是方法参数,方法名应该以小写字母或者下划线开头,全局变量应该以$开头,实例变量以@开头, class变量以@@开头,而类名,模块名,常量应该以大写字母开头。
一个名字可以是字母,数字,下划线的任意组合,但是有@后面不允许直接跟着一个数字。
总之,作为一门语言,不是一两个例子,几个文章能说清楚地,在网上流传的我爱ruby的10个原因等跟天下足球top ten类似的短文中,总会看到一个理由,就是fun with ruby。也许,更有趣的还在后面。
ruby语言是什么东西的更多相关文章
- [2014年学习计划之RoR系列] 第二步 – 熟悉Ruby语言 (2/n) Blocks and Iterators (代码块和迭代器)
[就算没有含金量,也请尊重原创, 转载自我的独立博客http://brucejia.net] Blocks and Iterators (代码块和迭代器) 代码块和迭代器是Ruby语言中比较有特点的东 ...
- 《Ruby语言入门教程v1.0》学习笔记-02
9.18 第四章 一切都是对象 这个章节的例子都举得很浅显易懂,而且作者的语言= =噗,委实生动有趣啊是~~ 4.1 两种思维方式 初期的编程思想是:以“如何做”为指导来编写代码.这时期的编程语言叫 ...
- 《Ruby语言入门教程v1.0》学习笔记-01
<Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...
- ruby语言仅仅是昙花一现
Ruby语言本身存在非常久了,在国内一直没火过.非常多人仅仅是知道有这样的语言,会的人少之又少.不论什么一种语言坚持十来年的发展,变得越来越好,一定有它不平常的地方.不能任意的去比較语言本身的好与坏. ...
- ruby语言学习笔记2
ruby学习笔记2 (摘自<ruby程序设计语言教程(中文版)>.pdf,全书25页) 1.同一个问题ruby有多个解决方案,途径 ruby之父:松本行弘(Matz),1993年创立 r ...
- Ruby语言的一些杂项
Ruby是纯正血统的面向对象语言,所有的一切,一切的一切都是对象 Ruby里块(语句块)的特性非常重要,这个优美的特性贯穿整个Ruby Ruby里模块和类的概念一样重要,模块也是Ruby里的一个非常优 ...
- 《Ruby语言入门教程v1.0》学习笔记-03
10.09 第七章 7.1 模块 Ruby标准包里的 Math 模块提供了许多方法,比如:求平方根 sqrt ,使用的时候要这么写:模块名.方法名(参数).如:Math.sqrt( a*5+b ) M ...
- Ruby语言学习笔记
在codecademy上开始玩ruby了 1.数据类型:boolean,string,number 变量直接用即可,不用声明(“拿来主义”) 运算符:+ - * / ** % == != && ...
- Ruby语言学习系列--String 类函数
函数名称 说明 示例 * 将字符串拷贝N次 “ha”*4 >> “hahahaha” + << concat 连接字符串 “yes” + “no” >& ...
随机推荐
- 数据可视化(2)--Justgage
JustGage 是一个 JavaScript 插件来生成很漂亮的仪表盘,基于 Raphaël 库做向量图绘制. JustGage 完全基于 SVG,因此支持几乎所有浏览器,包括:IE6+, Chro ...
- Robot Framework自动化测试(四)--- 分层思想
谈到Robot Framework 分层的思想,就不得不提“关键字驱动”. 关键字驱动: 通过调用的关键字不同,从而引起测试结果的不同. 在上一节的selenium API 中所介绍的方法其实就是关 ...
- IP地址查询API的C#实现
一切从登录记录开始 看到TX的登录记录之后,突然想去在登录环节也加上这个功能,然后就写了下面的具体实现代码.现在一点也不纠结IP在数据库中保存类型是UNSIGNED INT还是VARCHAR了. 干货 ...
- 阅读Nosql代码有感
这一年总得来说,读书的时间不多.一是因为时间啥关系,这一年一直在跟着项目走,或者被项目牵着走,几乎所有的时间和精力全部被拴在几个项目上:不过所幸今年创业失败,又回去上班了,时间相对空余了一些. 双十一 ...
- Django--上传文件
需求 Django中forms表单上传文件处理 速查 views.py 1 2 3 4 5 6 7 8 9 def upload(request): if request.method==' ...
- Linux各版本的本地root密码破解方法
(一)RedHat/CentOS/Fedora 系统密码破解 1.在grub选项菜单按E进入编辑模式 2.编辑kernel 那行最后加上S (或者Single) 3.按B,启动到single-user ...
- HTML常用符号
HTML转义符号 HTML常用符号: 显示一个空格 < 小于 < <> 大于 > >& &符号 & &" 双引号 & ...
- Python基础:序列(列表、元组)
一.概述 列表(list)是由一个个 Python对象 组成的序列.其中,Python对象 可以是任何类型的对象,包括 Python标准类型(数值.字符串.列表.元组和字典)以及 用户自定义类型(类) ...
- WCF小结
WCF总结 1.WCF(原代号为Indigo)是一个用于创建和运行分布式系统的技术集合,使用它能创建安全的.可靠的.跨平台的的分布式解决方案.它的面向服务的编程模型,整合了.Net平台下以往全部的分布 ...
- android dp
http://www.see-say.com/viewnews-47657.html http://cn.club.vmall.com/thread-970026-1-1.html http://ww ...