这是两个示例函数

def fun1(s: String, x: Int) = x
def fun2(x: Int) = x

我想部分应用fun1并使用fun2andThen组成。

这是我想说的
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 _也可以,但我认为它不可读)。

09-16 05:04