我不确定这是否说明或回答了您的问题,但这是真的。
我的猜测是,您希望您的 ab(_.i) 在添加属性(键入参数)后成为匿名函数。
但是 subexpr 通过there is no other expression of syntactic category Expr which is properly contained in e and which itself properly contains u.
(SLS 6.23)挫败了你
此外,您可以使用scalac -Xprint:parser
它来查看它是如何拍摄的。
object Foo {
def m(k: Int) = 7 * k
}
class Bar {
val i = 5
val What = i
}
object Bar {
type What = Int
}
object Test extends App {
Foo.m(_:Bar.What)
// this is not anon func placeholder syntax...
//Foo.m((_:Bar).What) // _ is in a subexpr
//Foo.m(_.i)
// ...for this
val f = (x: Bar) => Foo.m(x.i)
// InfixExpr is ok
val g = Foo m (_: Bar).i
val b = new Bar
println(f(b))
println(g(b))
}
对比,说明什么是被限制的:
scala> val f: (Int,Int)=>Int = _+_
f: (Int, Int) => Int = <function2>
scala> val g: Int=>Int = if (_ > 0) 1 else 2
<console>:7: error: missing parameter type for expanded function ((x$1) => x$1.$greater(0))