Ruby学习笔记
简介
Ruby是一门开源的动态语言,专注于简单和高生产力,它的语法优雅,易于编写也易于阅读。Ruby由日本人Matz编写,首次发布于1995年。
基本特性
万物皆对象
在语言设计初期,Matz就希望Ruby是一门比Perl更强大,而比Python更加OO的语言。Ruby中万物皆为对象,没有经典OO语言中所谓的基本类型:
1 |
5.times { print "Hello Ruby\n" } |
高度灵活
Ruby允许开发人员修改甚至移除它最基本的语言特征。例如你可以随时为内置类型添加新方法:
1 2 3 4 5 6 7 8 9 10 |
class Numeric def plus(x) self.+(x) end end class Main print(5.plus 6) # 11 end |
块(Blocks)
Ruby引入了块语法,开发人员可以用它来为任何方法引入闭包:
1 2 3 4 5 |
search_engines = %w[Google Yahoo MSN].map do |engine| 'http://www.' + engine.downcase + '.com' end print(search_engines) # ["http://www.google.com", "http://www.yahoo.com", "http://www.msn.com"] |
上面这个例子中, 块的范围由 do ... end 限定。map方法则把块应用到列表中的每一个字符串,进而生成新的列表。
混入(Mixins)
Ruby使用单继承,但是同时引入了模块(Modules)的机制,模块就是一系列方法的集合。
一个类可以混入一个模块,这样就拥有了模块中的所有方法。在Ruby中,任何实现了each方法的类,都可以混入Enumerable模块:
1 2 3 |
class MyArray include Enumerable end |
而Enumerable中的方法会调用each完成遍历操作。
变量
使用Ruby时,你不需要声明变量,它使用简单的前缀来区分变量的作用域:
变量 | 作用域 |
var | 可以是一个局部变量 |
@var | 实例变量 |
$var | 全局变量 |
这种约定让开发人员很容易区分变量的用途,而且,访问实例成员时,你也不需要self.前缀。
其它特性
支持异常处理机制 |
支持基于标记-清除算法的垃圾回收机制 |
在Ruby中编写C扩展比Perl或者Python中容易。在C中通过API调用Ruby也很简单 |
可以动态的加载扩展库 |
支持OS无关的线程机制 |
高可移植性 |
安装和配置
Ubuntu
1 2 3 4 5 6 |
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.3.tar.gz sudo apt install -y libyaml-dev libssl-dev xzf ruby-2.3.3.tar.gz cd ruby-2.3.3 ./configure --prefix=/home/alex/Ruby/2.3.3 make && make install |
配置
首先需要设置环境变量,把$RUBY_HOME/bin加入到$PATH中。
默认的RubyGems镜像速度比较慢,可以改用国内镜像:
1 2 3 4 |
# 因本机不信任ruby-china的证书签发机构StartCom,因此无法使用其https源,你如果信任,可以把下面的http改为https gem sources --add http://gems.ruby-china.org/ --remove https://rubygems.org/ gem sources -l # 确保输出中只有新添加的国内镜像 |
Leave a Reply