这是两个示例函数
def fun1(s: String, x: Int) = x
def fun2(x: Int) = x
我想部分应用
fun1
并使用fun2
与andThen
组成。这是我想说的
fun1("", _: Int) andThen fun2 _
但是我明白了
<console>:14: error: value andThen is not a member of Int
fun1("", _: Int) andThen fun2 _
以下代码有效
val a = fun1("", _: Int)
a andThen fun2 _
甚至
((fun1("", _: Int)): Int => Int) andThen fun2 _
没有帮助,就不能将
fun1("", _: Int)
视为函数。这是为什么?在这种情况下,我无法理解编译器如何解释类型。这是更多有线示例def fun1(s: String, x: Int) = s
def fun2(s: String) = s
fun1(_: String, 1) andThen fun2 _
<console>:14: error: type mismatch;
found : String => String
required: Char => ?
fun1(_: String, 1) andThen fun2 _
Char
来自哪里? 最佳答案
Placeholder Syntax for Anonymous Functions的规则意味着fun1("", _: Int) andThen fun2 _
表示x: Int => fun1("", x) andThen fun2 _
。编译器告诉您,fun1("", x)
的类型为Int
,没有andThen
。您想要的是{ x: Int => fun1("", x) } andThen fun2 _
((fun1("", _: Int)) andThen fun2 _
也可以,但我认为它不可读)。