gpt4 book ai didi

scala - 无法使用 andThen 内联部分应用的函数

转载 作者:行者123 更新时间:2023-12-01 13:43:22 25 4
gpt4 key购买 nike

这里有两个示例函数

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

我想部分应用 fun1 并使用 andThen 将其与 fun2 组合。

我想说的是

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

关于scala - 无法使用 andThen 内联部分应用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37952299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com