ZetCode

Ruby Require 方法

最后修改日期:2025 年 4 月 27 日

本教程将介绍如何使用 Ruby 的 require 方法来加载外部代码。该方法对于 Ruby 中的模块化编程至关重要。

require 方法只加载 Ruby 文件或扩展一次。它在 $LOAD_PATH 中搜索指定的文件。如果成功,该方法返回 true;如果已加载,则返回 false

load 不同,require 可防止同一文件被多次加载。它非常适合加载库和扩展。该方法同时处理 .rb 和特定于平台的扩展。

基本 Require 示例

这个简单的示例演示了如何使用 require 加载标准库模块。date 模块提供了日期操作功能。

basic_require.rb
require 'date'

today = Date.today
puts "Today is #{today}"

require 'date' 加载 Ruby 的日期模块。加载后,我们可以直接使用 Date 类。该方法会自动搜索标准库路径。

Requiring 本地文件

此示例显示了如何在同一目录中 require 本地 Ruby 文件。我们首先需要调整加载路径或使用相对路径。

local_require.rb
require_relative 'mylib'

puts MyLib.hello("Ruby")

require_relative 在相对于当前文件位置的文件中查找。这比修改 $LOAD_PATH 来加载本地文件更安全。

检查 Require 成功

require 方法返回一个布尔值,指示加载是否成功。我们可以使用它来优雅地处理丢失的依赖项。

require_check.rb
if require 'json'
  puts "JSON module loaded successfully"
else
  puts "JSON module not available"
end

该代码检查 require 的返回值以确认加载。此模式对于可选依赖项或备用实现很有用。

Requiring Gems

RubyGems 与 require 集成以加载已安装的 gem。此示例演示了如何 require 一个流行的 HTTP 库。

gem_require.rb
require 'httparty'

response = HTTParty.get('https://api.github.com')
puts response.code

安装 gem(gem install httparty)后,我们可以像加载任何标准库一样加载它。RubyGems 将 gem 路径添加到 $LOAD_PATH

条件 Require

我们可以根据环境有条件地 require 不同的实现。此示例加载生产或开发数据库适配器。

conditional_require.rb
if ENV['RACK_ENV'] == 'production'
  require 'pg'
else
  require 'sqlite3'
end

该代码检查环境变量以确定加载哪个数据库库。此模式在配置管理中很常见。

Requiring 多个文件

大型项目通常将代码拆分成多个文件。此示例演示了如何从目录中 require 几个相关文件。

multi_require.rb
Dir.glob(File.join('lib', '*.rb')).each do |file|
  require file
end

该代码使用 Dir.glob 来查找 lib 目录中的所有 .rb 文件。然后单独 require 每个文件。这自动化了许多文件的加载。

Requiring 并修改加载路径

有时我们需要在 require 之前将自定义路径添加到 $LOAD_PATH。此示例展示了如何正确修改加载路径。

load_path_require.rb
$LOAD_PATH.unshift(File.expand_path('../vendor', __FILE__))
require 'custom_lib'

puts CustomLib.version

该代码在 require 之前将 vendor 目录添加到加载路径。使用 unshift 确保首先搜索我们的路径。始终正确展开路径。

来源

Ruby Require 文档

本教程通过实际示例介绍了 Ruby 的 require 方法,展示了库加载、本地文件、gem 和路径管理技术。

作者

我的名字是 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教学编程方面拥有十多年的经验。

列出 所有 Ruby 教程