首页 > 解决方案 > Ruby 中一个匿名函数的参数

问题描述

我想知道这段代码的含义,以找到一个可能的错误:

-> a, b, c, d, e, f, g, h, i, j {
  l = -> s, t = c {
    Math.log(s, t)
  }
}

谢谢

标签: ruby

解决方案


第一部分:-> a, b, c, d, e, f, g, h, i, j { ... }是 lambda 或匿名函数的声明。

其中 a,b,c... 等是要在块内作为变量传递的参数{..}

这与以下内容相同:lambda { |a,b,c,...j| ... }

你可以在这里看到一个类似的例子:

ex1 = -> a,b,c,d {
  puts a;
  puts b;
  puts c;
}

ex1.call('1', '2', '3', '4');

然后它在其中返回另一个 lambda:

l = ->s, t = c {Math.log(s, t)

->符号所示,默认t参数为外部 lambda 中先前提供c的 arg。

最后,它在内部 lambda 的 s 和 t 参数上调用 Math.log。

这是一个简化版本:

ex2 = -> a,b { c = -> d, e = b { puts d; puts e } }

ex2.call(1,2).call(3) # e is optional since it's defaulted to b
# => 3,2

注意:您的代码缺少一些}.


推荐阅读