ruby语言是什么东西?
作者:http://www.ruby-cn.org/ 转载请保留
1、简介
Ruby是日本的Yukihiro Matsumoto写的,简单易学的面向对象的脚本语言,像perl一样,有丰富的文字处理、系统管理等丰富 功能,但是ruby要简单,容易理解和扩充。跟python很类似,但是在国内远没有python有名。
一般认为,他有如下特点:
- 简单
解释型语言(インタプリタ),所以不必事先编译(コンパイル)。
变量没有类型的区分,虽然可以省去类型错误的担忧,但也会引起编译时候检查的脆弱。
变量不需要定义。
简单的语法,多从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语言是什么东西?相关推荐
- Ruby 语言问世 | 历史上的今天
整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 12 月 21 日,在 55 年前的今天,世界第一例心脏移植者逝世:世界上第一个心脏移植病人路易·华 ...
- 链接orientdb的图形数据库_OrientDB数据库(ruby语言操作)
OrientDB是兼具文挡数据库的灵活性和图形数据库管理链接能力的可深层次扩展的文档-图形数据库管理系统.可选无模式.全模式或混合模式下.支持许多高级特性,诸如ACID事务.快速索引,原生和SQL查询 ...
- ruby语言开源Web应用框架 Ruby on Rails 简介
目录 Ruby on Rails是什么 历史 Rails 的 MVC 架构 Web 服务器支持 数据库支持 系统要求 集成开发环境 Ruby on Rails是什么 Ruby on Rails(官方简 ...
- ruby语言仅仅是昙花一现
Ruby语言本身存在非常久了,在国内一直没火过.非常多人仅仅是知道有这样的语言,会的人少之又少.不论什么一种语言坚持十来年的发展,变得越来越好,一定有它不平常的地方.不能任意的去比較语言本身的好与坏. ...
- yum安装ruby_CentOS 7下配置Ruby语言开发环境的方法教程
本文跟大家分享的是在CentOS 7下配置Ruby语言开发环境的方法教程,分享出来供大家参考学习,下面来看看详细的介绍: 安装Ruby 2.2 CentOS7存储库中的Ruby版本为2.0,但如果需要 ...
- Ruby语言学习系列--基本的ruby语法
Ruby语言学习系列--基本的ruby语法 1. 基本的ruby语法 1.1 变量.常量和类型 1) 定义变量 变量类型 描述 示例 局部变量(或伪变量) 以小写字母或下划 ...
- 【ruby】ruby语言的几个特性总结
最近在学习ruby,我觉得学习一门语言要先了解语言的基本特性,然后再深入语法.细节特性等. 所以先从ruby语言的特性入手,结合例子简单总结了几点,才真正开始学没多久,绝对不全面,还需后续的学习再补充 ...
- Ruby 语言的冗余性、缺陷性和动态性正是现实世界的真实写照
Ruby语言具有动态特征,代码行为随时可以改变,本书后面内容都将围绕这一特征展开介绍. 产生高级编程语言以来的50年间,从没有哪一种语言像Ruby这样近似于现实世界.看看网络,数不清的信息扑面而来,你 ...
- Ruby语言能做什么?
Ruby语言是一种通用的编程语言,它具有面向对象.动态.解释型等特点.自1995年发布以来,Ruby语言已经发展成为非常流行的编程语言之一.Ruby语言具有很多优点,它可以用于开发各种类型的应用程序, ...
最新文章
- Oracle 分析及动态采样
- java.lang包怎么用_java.lang.io包的使用
- mac系统访问群晖服务器地址,获取发现访问 U-NAS 系统管理中心 IP 地址方法
- codeforces 7.22 E Permutation Shift
- 微型计算机原理sar,微机原理的题一.程序分析 1.MOV AX,80F0H MOV CL,10H SAR AX,CL ADD AX,80H...
- 使用postman发送json数据报错400
- CodeForces - 1337C Linova and Kingdom(贪心)
- BestCoder Round #91 1001 Lotus and Characters
- [渝粤教育] 盐城工学院 水处理微生物学 参考 资料
- 【OS学习笔记】四 什么是虚拟机
- python列表添加元素到中间_python在列表的元素中间插入空行
- python字符串函数的find方法_Python string模块 字符串函数方法操作教程
- 程序员面对分歧和难题应当具备的态度
- Wireshark实战分析之TCP协议(三)
- 【聚焦群落生态学】统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法
- bootstrap制作一个优美的导航栏
- Cocos2d-x3.2刀塔创奇三消游戏源码,跑酷游戏源码,塔防游戏源码
- 零基础新手如何学习SEO
- react-native-beacons-manager使用(Beacons.startRangingBeaconsInRegion)闪退 --工作笔记
- 解决ubuntu下外接2k显示器却无法调2k分辨率问题