踏上ruby征程吧
试着让 Ruby 更自然,而不是更简单
ruby 初见
Ruby 是一个注重均衡的语言,松本行弘(Yukihiro “Matz” Matsumoto)发明,兼具函数式编程和命令式编程特色的语言。
Ruby 完全免费。
Ruby 把一切视为对象。
Ruby 很灵活性,Ruby 的核心部分可以更改,也可以重新定义。
Ruby 代码块:表现力强大的特性。 代码块使用 do ... end
结构表述,Ruby 中有很多方法都留出了切入点,让程序员编写代码块,控制方法具体的操作细节。
Ruby 中的混入。 Ruby“有意”只提供单继承,但是Ruby有模块,类可以混入模块,得到模块中的所有方法。
1 | class MyArray |
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 | def functionName |
函数以有默认参数值, 支持可变长参数 *argName
,函数只能返回一个值
函数调用两方式:func arg1 arg2...
func(arg1, arg2)
字符串中替换变量
#{变量名}
, 这里面还可以调用变量的方法 #{变量名.方法}
。
1 | irb(main):007:0> name = "zhao yuan" |
定义类
1 | class Greeter |
特别留意一下 @name
,这是一个实例变量。类里面的任何函数都可以使用实例变量
注释
注释以#
开头
多行注释: =begin
和 =end
之间的区域
1 | =begin |
变量
ruby 变量不需要事先声明。
常量
常量生命周期就是程序运行的时间。 以大写字母开头的变量, 就是常量, 不过通常约定常量的所有字母都用大写字母, 也可以在中间用下划线分隔。
常量值可以改, 回收到解释器的 warning, 但不影响执行。