ruby – 是否可以在rake任务中包含一个模块而不会污染全局范围?

ruby – 是否可以在rake任务中包含一个模块而不会污染全局范围?,第1张

概述我想知道 – 是否有可能为rake任务创建私有帮助器,无论我如何尝试它们,它们最终都可以在全局范围内使用,并且可以作为任何对象的方法使用.例如: ## this is what I needmodule MyRakeHelpers def helper_1 end def helper_2 endendinclude RakeHelperstask :sometas 我想知道 – 是否有可能为rake任务创建私有帮助器,无论我如何尝试它们,它们最终都可以在全局范围内使用,并且可以作为任何对象的方法使用.例如:

## this is what I needmodule MyRakeHelpers  def helper_1  end  def helper_2  endendinclude RakeHelperstask :soMetask do  helper_1  helper_2end## And this should not work:# global scopehelper_1"a random object".helper_1class RandomClass  def foo    helper_1  endend
解决方法 这对我有用:

module MyRakeHelpers  def helper    puts 'foo'  endendmodule MyRakeTasks  extend Rake::DSL  extend MyRakeHelpers  task :some_task do    helper  endend

简而言之,您可以通过包含(或扩展)Rake :: DSL在不同的范围内使用Rake DSL.从source:

DSL is a module that provIDes #task,#desc,#namespace,etc. Use this when you’d like to use rake outsIDe the top level scope. For a Rakefile you run from the command line this module is automatically included.

任务使用Rake :: Task#define_task引擎盖,您也可以使用它来编写自己的DSL.

感谢How To Build Custom Rake Tasks; The Right Way关于define_task的提示.

总结

以上是内存溢出为你收集整理的ruby – 是否可以在rake任务中包含一个模块而不会污染全局范围?全部内容,希望文章能够帮你解决ruby – 是否可以在rake任务中包含一个模块而不会污染全局范围?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1241863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存