gpt4 book ai didi

ruby - 当任务使用 `args` 而不是 `execute` 运行时,为什么 `invoke` 不是 Rake::TaskArguments 的实例?

转载 作者:行者123 更新时间:2023-12-02 00:50:57 24 4
gpt4 key购买 nike

在 Rake 中,当您使用 execute 从另一个任务显式运行任务时命令,即:

Rake::Task['some_task'].execute(args=[arg1, arg2])

在运行的任务中, args将是一个常规数组。如果您使用 invoke 运行任务功能,即:
Rake::Task['some_task'].invoke(arg1, arg2)
args命令将是 Rake::TaskArguments 的一个实例.因此,您可以使用类似 Rake::TaskArguments.with_defaults 的方法。 .

为什么会存在这种差异?有没有办法确保任务中的参数是 Rake::TaskArguments 的实例? ?

一般来说,调用任务的方法改变参数的身份似乎很奇怪。

最佳答案

很好的问题,我找不到明确的原因 invoke将参数包装为 Rake::TaskArgumentsexecute没有。
execute来自 invoke为了完成任务的工作,此时参数已经包含在 Rake::TaskArguments 中。实例。这就是为什么在“正常”使用中你会得到 Rake::TaskArguments在你的任务中。我会说正常使用是在命令行上指定的任务或作为依赖项。在这些情况下,您可以通过 invoke 调用任务。在 rake 本身。

确保任务中的参数始终是 Rake::TaskArguments例如,我想唯一的方法是在您使用时包装参数 execute在您自己的代码中。例如。

Rake::Task['some_task'].execute(Rake::TaskArguments.new(argument_names, [arg1, arg2]))
argument_names是必需的,是任务期望的参数名称。您实际上可以从任务本身中获得该信息 Rake::Task['some_task'].arg_names .名称数组中的参数位置需要与命名参数值中的位置匹配。

可能值得向佣金团队提出您的问题: https://github.com/ruby/rake/issues

关于ruby - 当任务使用 `args` 而不是 `execute` 运行时,为什么 `invoke` 不是 Rake::TaskArguments 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57711871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com