踏上ruby征程吧

试着让 Ruby 更自然,而不是更简单

ruby 初见

Ruby 是一个注重均衡的语言,松本行弘(Yukihiro “Matz” Matsumoto)发明,兼具函数式编程和命令式编程特色的语言。

Ruby 完全免费

Ruby 把一切视为对象。

Ruby 很灵活性,Ruby 的核心部分可以更改,也可以重新定义。

Ruby 代码块:表现力强大的特性。 代码块使用 do ... end 结构表述,Ruby 中有很多方法都留出了切入点,让程序员编写代码块,控制方法具体的操作细节。

Ruby 中的混入。 Ruby“有意”只提供单继承,但是Ruby有模块,类可以混入模块,得到模块中的所有方法。

1
2
3
class MyArray
include Enumerable
end

Ruby 变量约定:在 Ruby 中,不需要提前声明变量。Ruby 使用简单的命名约定指明变量的作用域。

  • var 可能是局部变量
  • @var 是实例变量
  • $var 是全局变量

Ruby 还有其他众多特性,下面列举一些:

  • Ruby 的异常处理特性与 Java 和 Python 类似,易于处理错误。
  • Ruby 拥有一个针对所有对象的标识-清扫(mark-and-sweep)式垃圾回收程序)。使用者无需维护扩展库中的引用计数。正如 Matz 所说:“这对您的健康有益。”
  • 为 Ruby 写 C 扩展比 Perl 和 Python 容易,因为 Ruby 有一个非常雅致的 API,能从 C 语言中调用 Ruby。例如,调用软件中内嵌的 Ruby,当做脚本语言使用。此外,还有 SWIG 接口可用。
  • 如果操作系统允许,Ruby 可以动态加载扩展库。
  • Ruby 提供不依赖操作系统的线程。所以,不管操作系统是否支持,Ruby 支持的所有操作系统都可以使用多线程,甚至是 MS-DOS!
  • Ruby 高度可移植:它主要在 GNU/Linux 上开发,但也支持很多类型的 UNIX,以及 macOS,Windows,DOS,BeOS,OS/2 等。

Ruby 的其他实现

作为一门语言,Ruby 有不同的实现。本页讨论的是推荐的实现,社区通常称之为 MRI(“Matz’s Ruby Interpreter”)或 CRuby(因为是用 C 语言写的)。不过,还有一些别的实现。其他实现通常在特定的场合中有用,集成了其他语言或环境,或者有 MRI 不具有的特性。

下面列出一些其他实现:

  • JRuby 是基于 JVM(Java Virtual Machine)的 Ruby 实现,利用了 JVM 中优秀的 JIT 编译器、垃圾回收程序、并发线程、工具生态系统和大量的库。
  • Rubinius 是用“Ruby 编写的 Ruby”。构建于 LLVM 之上,Rubinius 跑在一个很灵活的虚拟机上,别的语言也可以构建于这个虚拟机上。
  • mruby 是 Ruby 语言的轻量级实现,可以链接或嵌入到程序之中。mruby 由 Ruby 的创建者松本行弘(Matz)领导开发。
  • IronRuby 是一个“与 .NET 框架紧密集成”的实现。
  • MagLev 是“一个快速、稳定的 Ruby 实现,支持集成对象持久化和分布式共享缓存”。
  • Cardinal 是一个“为 Parrot 虚拟机 (Perl 6)编写的 Ruby 编译器”。

定义函数

1
2
3
def functionName
//todo
end

函数以有默认参数值, 支持可变长参数 *argName ,函数只能返回一个值

函数调用两方式:func arg1 arg2... func(arg1, arg2)

字符串中替换变量

#{变量名} , 这里面还可以调用变量的方法 #{变量名.方法}

1
2
3
4
irb(main):007:0> name = "zhao yuan"
=> "zhao yuan"
irb(main):008:0> puts "Hello #{name.capitalize}"
Hello Zhao yuan

定义类

1
2
3
4
5
6
7
8
9
10
11
class Greeter
def initialize(name = "World")
@name = name
end
def say_hi
puts "Hi #{@name}!"
end
def say_bye
puts "Bye #{@name}, come back soon."
end
end

特别留意一下 @name,这是一个实例变量。类里面的任何函数都可以使用实例变量

注释

注释以# 开头

多行注释: =begin=end 之间的区域

1
2
3
4
5
=begin
这是一个多行注释例子
我是多行注释
=end
print "Welcome to Ruby Essentials!"

变量

ruby 变量不需要事先声明。

常量

常量生命周期就是程序运行的时间。 以大写字母开头的变量, 就是常量, 不过通常约定常量的所有字母都用大写字母, 也可以在中间用下划线分隔。

常量值可以改, 回收到解释器的 warning, 但不影响执行。