在 Ruby 中加载与需要
每次执行文件(在其中调用 load)时, Load都会读取并解析文件。在大多数情况下,我们将使用 require,但在某些情况下,当我们的模块频繁更改时,我们可能希望在加载此模块的类中获取这些更改。
句法:
load 'filename'
示例 1:
在本例中,我们创建了一个名为car.rb的文件,其中包含以下代码:
puts '----------car.rb loaded-----------'
class Car
def initialize(make, color)
# Instance variables
@make = make
@color = color
end
def start_engine
if @engine_state
puts 'Engine already Running'
else
@engine_state = true
puts 'Engine Idle'
end
end
end
现在,我们创建另一个文件名为loadex.rb ,其中包含以下代码:
# Calling car.rb file
# Using load
load 'car.rb'
m = Car.new('GMC', 'blue')
m.start_engine
# Calling car.rb file
# Using load
load 'car.rb'
m = Car.new('GMC', 'blue')
m.start_engine
输出:
----------car.rb loaded-----------
Engine Idle
----------car.rb loaded-----------
Engine Idle
说明:在上面的例子中,我们可以看到 load 模块在每次调用 load函数时都会加载 car.rb 文件。您应该使用加载函数主要是为了从其他正在动态更改的文件中加载代码,以便每次都获取更新的代码。
示例 2:
在本例中,我们创建了 math.rb文件,其代码如下:
puts '----------math.rb loaded-----------'
class Mathex
def initialize(num1, num2)
# Instance variables
@a = num1
@b = num2
end
def add
puts 'adding both numbers'
puts @a + @b
end
end
现在,我们创建另一个文件名为loadex1.rb ,其中包含以下代码:
# Calling math.rb file
# Using load
load 'math.rb'
m = Mathex.new(1, 2)
m.add
# Calling math.rb file
# Using load
load 'math.rb'
m = Mathex.new(1, 2)
m.add
输出:
----------math.rb loaded-----------
adding both numbers
3
----------math.rb loaded-----------
adding both numbers
3
Require从文件系统中读取文件,解析它,保存到内存,然后在给定的地方运行它。在 require 中,如果在脚本运行时修改了指定的文件,这些修改将不会被应用,Ruby 将使用内存中的文件,而不是机器的文件系统中的文件。它还使您可以访问内置 Ruby 的多个库和扩展,以及其他程序员编写的更多内容。在大多数情况下,您将使用 require,但在某些情况下加载是有益的,例如,当您的模块频繁更改时,您将希望在加载此模块的类中选择这些更改。
句法:
require 'filename'
示例 1:
在本例中,我们创建了一个名为car.rb的文件,其中包含以下代码:
puts '----------car.rb loaded-----------'
class Car
def initialize(make, color)
# Instance variables
@make = make
@color = color
end
def start_engine
if @engine_state
puts 'Engine already Running'
else
@engine_state = true
puts 'Engine Idle'
end
end
end
现在,我们创建一个包含以下代码的新文件requireex.rb :
# Calling car.rb file
# Using require
require './car.rb'
m = Car.new('GMC', 'blue')
m.start_engine
# Calling car.rb file
# Using require
require './car.rb'
n = Car.new('BMW', 'red')
n.start_engine
输出:
----------car.rb loaded-----------
Engine Idle
Engine Idle
解释:在上面的例子中,我们可以看到,即使我们第二次调用 require 它并没有像在 load 例子中那样再次打印“car.rb loaded”,因为 require 只加载一次文件。
示例 2:
在本例中,创建 math.rb 文件,其代码如下:
puts '----------math.rb loaded-----------'
class Mathex
def initialize(num1, num2)
# Instance variables
@a = num1
@b = num2
end
def add
puts 'adding both numbers'
puts @a + @b
end
end
现在,我们创建一个包含以下代码的新文件requireex1.rb :
# Calling math.rb file
# Using require
require './math.rb'
m = Mathex.new(1, 2)
m.add
# Calling math.rb file
# Using require
require './math.rb'
m = Mathex.new(1, 2)
m.add
输出:
----------math.rb loaded-----------
adding both numbers
3
adding both numbers
3