ruby - Ruby 中一个匿名函数的参数
问题描述
我想知道这段代码的含义,以找到一个可能的错误:
-> a, b, c, d, e, f, g, h, i, j {
l = -> s, t = c {
Math.log(s, t)
}
}
谢谢
解决方案
第一部分:-> 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
注意:您的代码缺少一些}
.
推荐阅读
- install4j - install4j 在包含的目录中保留符号链接
- php - 按自定义字段中的部分字符串查询
- android - 如何设置 Android 通知通道?
- c++ - 如何将 C++ 矢量数据导入 Swift
- visual-studio - Visual Studio IDE 可以使用长路径名吗?
- javascript - 使用 event.key 而不是 event.keyCode
- laravel - Laravel 通知重定向到新创建的项目
- bash - 统计目录中所有文本文件中的唯一单词,并删除那些少于 2 的单词?
- go - 从频道范围内提前返回
- java - mvn install 绕过验证阶段