ruby - 如何将局部变量从模块导入到Ruby中的另一个类
问题描述
我是 Ruby 的新手。
我有一种情况,我在运行时在模块中生成一些值,我需要在另一个类中访问它。最好的方法是什么?下面我给出了我的目录结构和一个虚拟代码。我想将 module.rb 中的“local_variable_a”导入 someclass.rb。
目录结构:
文件夹_A -> 文件夹_B -> 文件夹_C -> 模块.rb
Folder_A -> Folder_D -> someclass.rb
模块.rb
Module First
Module Second
def some_method
local_variable_a = some_value
end
end
end
某类.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 中没有变量导入功能,因为它基于使用消息传递方法。要“导入”变量,您将它们作为输入传递给方法 - “导出”变量,您可以从方法中返回它们。
如果您希望模块公开任何内容,您可以通过以下方法进行:
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
推荐阅读
- javascript - 如何让primeng的确认服务等待用户的同意或拒绝?
- python - 读取帧python时无法限制每秒帧数
- hyperledger-fabric - Hyperledger Fabric - 更改 max_message_count 配置更新“错误验证增量集”以下教程
- azure - 如何在 velero 部署上运行 helm upgrade?
- javascript - 图片无法在网站上加载但在本地加载
- javascript - 价值不会实时变化——VueJS
- git - 如何将开发分支带入从功能分支克隆的远程仓库?
- c# - 使用 selenium C# 处理打印弹出窗口
- android - 在 Android 10 (Q) 上拍摄和裁剪图像后,Google Photo App 崩溃
- python - 如何打印特定的numpy数组对