跳到主要内容

Ruby 工作方式

Ruby 通常作为解释型动态语言使用。你写 .rb 文件,然后由 Ruby 解释器读取并执行。理解 Ruby 的工作方式,可以帮你更好地理解“为什么有些错误运行时才出现”“为什么变量不用声明类型”“为什么 gem 需要 require”。

Ruby 程序怎样运行

创建一个文件:

hello.rb
puts "Hello, Ruby!"

运行:

ruby hello.rb

Ruby 会读取文件并执行里面的代码。对于初学者,你可以先把 Ruby 想象成“从上到下执行脚本”的语言。

CRuby、解释器和 VM

你通常安装和使用的是 CRuby,也就是官方主流 Ruby 实现。CRuby 会解析 Ruby 源码,并在 Ruby VM 中执行。

你不需要一开始理解 VM 的所有细节,但要知道两件事:

  • Ruby 不是像 C/C++ 那样先编译成一个独立二进制文件再运行。
  • Ruby 的很多类型检查和方法查找发生在运行时。

例如:

value = "ruby"
puts value.upcase

value = 42
puts value.upcase

第一段能运行,第二段会报错,因为 Integer 对象没有 upcase 方法。Ruby 不会在你给 value 重新赋值时阻止你,但运行到方法调用时会检查对象是否能响应这个方法。

动态类型是什么

Ruby 中变量没有固定类型:

value = 10
value = "hello"
value = [1, 2, 3]

更准确地说,变量是一个名字,它指向某个对象;对象自己知道自己的类型:

puts 10.class
puts "hello".class
puts [1, 2, 3].class

动态类型让写代码很灵活,但也要求你通过测试、命名和清楚的结构降低错误风险。

require 是什么

当你需要使用其他文件或标准库时,会用 require

require "json"

data = JSON.parse('{"name":"Ruby"}')
puts data["name"]

require 会加载库文件。标准库、gem 和你自己的项目文件都可能通过不同方式加载。

项目内部文件也常用:

require_relative "my_tool"

require_relative 会按当前文件位置查找相对路径,适合同一个项目内的小脚本。

IRB 的作用

IRB 是 Interactive Ruby 的缩写。你可以在里面立刻执行 Ruby 表达式:

irb

然后输入:

"ruby".upcase
[1, 2, 3].map { |n| n * 2 }

学习新方法时,先在 IRB 里试一试非常有效。

小结

Ruby 程序通常由解释器执行,变量是动态类型,方法查找发生在运行时。你可以用 IRB 探索,用 .rb 文件保存脚本,用 require 组织代码。