Ruby Kernel#load方法指定模块参数的用法示例及适用场景咨询
Ruby Kernel#load 加载脚本到模块上下文的用法
用法示例
先准备一个要加载的脚本文件 my_script.rb:
# 定义一个方法 def greet "Hello from the loaded script!" end # 定义实例变量 @message = "This is an instance variable from the script" # 打印当前执行上下文 puts "Script running in: #{self}"
然后在主程序文件 main.rb 中,把脚本加载到指定模块的上下文:
# 创建一个空模块 module MyModule end # 加载脚本到MyModule的上下文里执行 load 'my_script.rb', MyModule # 调用模块里的方法 puts MyModule.greet # 输出结果: Hello from the loaded script! # 访问模块的实例变量 puts MyModule.instance_variable_get(:@message) # 输出结果: This is an instance variable from the script # 验证方法确实属于MyModule puts MyModule.method_defined?(:greet) # 输出结果: true
运行main.rb后,脚本里的代码会在MyModule的上下文中执行,所有定义的方法和变量都归属于这个模块。
适用场景及原因
避免全局命名空间污染
很多第三方脚本或复用脚本会直接定义全局方法、变量,直接加载很容易和主程序里的同名内容冲突。把脚本加载到指定模块后,所有定义的内容都被封装在模块内部,完全不会干扰主程序的全局环境。复用脚本逻辑到不同模块
如果同一段脚本逻辑需要在多个业务模块中复用,但又希望各个模块的逻辑互相隔离,就可以把脚本分别加载到不同的模块里。不用修改原脚本的任何代码,就能实现逻辑复用同时保证隔离性。动态扩展模块功能
可以把模块的功能拆分成多个脚本文件,主模块只保留基础功能,扩展功能写成单独的脚本,需要的时候通过load加载到模块中。这种方式很适合做插件式扩展,想新增功能只需要添加对应的脚本,不用改动主模块的核心代码。
内容的提问来源于stack exchange,提问作者Shamaoke
相关产品推荐
相关产品推荐

