scala - Scala 强调 lambda 中的用法
问题描述
我在弄清楚下面代码的差异时遇到了问题。
val l1 = List('a', 'b')
val l2 = List(1, 2, 3, 4)
val x = l1.flatMap(v1 => l2.map(b => "" + v1 + b))
print(x)
//List(a1, a2, a3, a4, b1, b2, b3, b4)
.
val l1 = List('a', 'b')
val l2 = List(1, 2, 3, 4)
val x = l1.flatMap(v1 => l2.map(_ => "" + v1 + _))
print(x)
//List(One$$$Lambda$13/398887205@1554909b, One$$$Lambda$13/398887205@6bf256fa, One$$$Lambda$13/398887205@6cd8737, One$$$Lambda$13/398887205@22f71333, One$$$Lambda$13/398887205@13969fbe, One$$$Lambda$13/398887205@6aaa5eb0, One$$$Lambda$13/398887205@3498ed, One$$$Lambda$13/398887205@1a407d53)
不应该_
和b
行为相同吗?
解决方案
使用下划线的等价物b => "" + v1 + b
就是"" + v1 + _
.
_ => "" + v1 + _
而是等效于_ => (b => "" + v1 + b)
or a => (b => "" + v1 + b)
。
推荐阅读
- python - Django Rest Framework 多个数据库
- git - 自分支以来如何取消暂存所有文件
- material-ui - 材质 UI 覆盖步骤图标样式
- javascript - 函数不断返回 NaN
- django - Django:多个不同的字段->一个模型
- c++ - 为什么我不能在同一个 MS VS 解决方案的两个控制台应用程序中使用 C++ Eigen(仅标头库)?
- c# - 如何在 C# 中计时执行 SQL 查询?
- r - 检查是否在未加载的情况下安装了包
- sql - 如何在 Oracle SQL 中的键中的特定值之后向行添加标志?
- php - Laravel - 如何按 hasMany 中的相关属性排序