如何将局部变量从一个模块导入到 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
我是 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