如何将局部变量从一个模块导入到 Ruby 中的另一个 class

How to import local variable from a module to another class in Ruby

我是 Ruby 的新人。

我有一种情况,我在运行时在一个模块中生成一些值,我需要在另一个 class 中访问它。最好的方法是什么?下面我给出了我的目录结构和一个虚拟代码。我想将“local_variable_a”从 module.rb 导入到 someclass.rb。

目录结构:

Folder_A -> Folder_B -> Folder_C -> module.rb

Folder_A -> Folder_D -> someclass.rb

module.rb

Module First
  Module Second
    def some_method
      local_variable_a = some_value
    end
  end
end    

someclass.rb

class Example
  def initialize(example)
    @example = example
  end

  def another_method
    local_variable_a = some_value  //import from module.rb
  end

Ruby 中的局部变量就是这样。它们是存在于定义它们的词法范围(方法、块等)中的词法变量。一旦该范围关闭,它们就会被垃圾收集。

例如,在这里分配局部变量是完全没有意义的,因为它的垃圾会在方法结束后立即被收集:

def another_method
  local_variable_a = some_value  //import from module.rb
end

Ruby 中没有变量导入功能,因为它基于消息传递方法的使用。要“导入”变量,您将它们作为输入传递给方法 - 要“导出”变量,您 return 从方法中传递它们。

如果您希望模块公开任何内容,您可以通过以下方法来完成:

module Foo
   # this is an instance variable that belongs to the module
  @baz = "Hello World"
  def self.bar
    @baz
  end
end

puts Foo.bar

如果您想让模块定义一组实例变量,那么只需创建一个您从初始化程序调用的实例方法:

module TimeStamps
  def set_timestamps!
    @initialized_at = Time.now
  end

  def initialized_at 
    @initialized_at
  end
end

class Bar
  include TimeStamps

  def initialize
    # ...
    set_timestamps!
  end
end

Bar.new.initialized_at
# => 2021-06-18 12:44:32.357627871 +0200