【问题标题】:Access Uncaptured Proc Arguments访问未捕获的 Proc 参数
【发布时间】:2015-04-10 14:18:43
【问题描述】:

我可以访问调用的 ruby​​ Proc 的未捕获参数吗? Ruby Procs 非常类似于 JavaScript 函数。在 Javascript 中,我可以使用 arguments[someIndex]。这个有红宝石版本吗?

my_proc = Proc.new { |a| p a } #This captures the first argument but not the second
my_proc.call(42,43)
#Can I still access the second argument without capturing it (|a,b|) (with something some kind of a ruby equivalent to `arguments[1]` or doing anything within the pipes)?

(为什么我要问:我已经为自己编写了一个基于strace 的依赖跟踪sh 替代rake,如果我要在Rake 任务中使用它,它需要知道将发现的依赖项分配给哪个任务。换句话说,它需要访问调用它的任务块的第一个参数,但我不希望它依赖于总是以特定方式捕获的第一个参数.)

【问题讨论】:

  • 不清楚你在问什么。
  • 我已经编辑了这个问题,希望让它更清楚一点。
  • my_proc = Proc.new { |*a| p a } splat 完全符合您的要求。
  • @mudasobwa 不同之处在于您必须提前将其包含在您的方法签名中。如果你不这样做,那么事后就没有办法(我知道)访问其他参数。
  • @mudasobwa 问题是您是否可以访问未捕获的参数。答案是否,但您可以使用 splat 来确保没有未捕获的参数 :)

标签: ruby


【解决方案1】:

Ruby 没有等效于 Javascript 的 arguments 访问器。正如@mudasobwa 所指出的,如果您希望稍后访问它们,则必须使用 splat 运算符来“吸收”所有剩余的参数:

my_proc = Proc.new { |expected_arg1, expected_arg2, *rest| p expected_arg1 }

在使用关键字参数时使用双标:

my_proc = Proc.new { |expected_arg1:, **rest| p expected_arg1 }

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2017-03-22
    • 2017-05-02
    • 2021-04-27
    • 2018-08-26
    • 2013-05-09
    相关资源
    最近更新 更多