首页 > 解决方案 > “未绑定占位符参数”的解释

问题描述

问题

为什么案例 2 会导致“未绑定的占位符参数”,而案例 1 可以?

情况1

val h: (Int => Int) = (x:Int) => { scala.util.Random.nextInt(x) }
val _h: (Int => Int) = { scala.util.Random.nextInt(_) }
h(5)     // 3
_h(5)    // 3

案例2

val f: (Int => Int) = (x:Int) => { x }
f(5)     // 5
// Causes error
val _f: (Int => Int) = { _ }   <----- unbound placeholder parameter

标签: scalafunctionscala-placeholder-syntax

解决方案


_永远不会像x => x在 Scala 中那样被解释。

如果我正确理解了语言规范中关于“绑定下划线部分”的部分,这正是因为 Scala 保留_了部分应用程序。就像在它的情况下scala.util.Random.nextInt(_)意味着x => nextInt(x)而不是nextInt(x => x)


推荐阅读