📜  在 Ruby 中加载与需要

📅  最后修改于: 2022-05-13 01:54:32.428000             🧑  作者: Mango

在 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