我有一个gem(例如mygem
)并且正常情况下,我将mygem
添加到文件中,将require "mygem"
添加到顶部。如果mygem
中的方法名为finish_jobs
并且我希望它在以下位置运行,该怎么办:
require "mygem"
# code, code code
finish_jobs
如果不强迫用户每次使用gem时添加方法,我该如何做?
具体来说,我要做的是编写一个服务器应用程序(带机架),我需要在服务器启动之前处理文件正文中的方法。
答案 0 :(得分:1)
这当然是可能的。
为什么不直接将代码添加到Gem中(因为它听起来像是在你的控制之下并且不是外部依赖)?
module MyGem
def printSomething
p 2 + 2
end
module_function :printSomething
printSomething()
# => 4
end
如果这不是您的想法,请告诉我,我可以更新解决方案。
另请参阅Kernel#at_exit
有关Kernel#at_exit
答案 1 :(得分:0)
我不知道如何做你正在描述的事情。
一种解决方法是提供接受块的API。这种方法允许您在用户设置之后运行代码,而不会向其公开实现细节。
用户可以调用您的库方法,提供一个块来设置他们的服务器:
require "mygem"
MyGem.code_code_code {
# user's code goes here
}
然后,您的图书馆代码将:
以下是一个示例实现:
module MyGem
# Run some user-provided code by `yield`-ing the block
# Then run the gem's finalizer
def self.code_code_code
# Execute the block:
yield
# Finalize:
finish_jobs
end
end
这样,您可以接受来自用户的代码,但仍然可以控制设置和完成。
我希望它有所帮助!