gpt4 book ai didi

Scala 重载函数添加柯里化(Currying)?

转载 作者:行者123 更新时间:2023-12-04 20:14:55 26 4
gpt4 key购买 nike

今天开始学习 Scala,我很好奇你是否可以重载一个函数来添加柯里化(Currying),比如:

def add(x: Int, y: Int): Int = x + y
def add(x: Int)(y: Int): Int = x + y

但是这段代码不仅不能编译,而且我听说在 Scala 中重载也不是一个好主意。

有没有一种方法可以重载 add 使其在不进行部分应用的情况下进行柯里化(Currying),这意味着 add(1, 2)add(1)(2) 都可以工作?

最佳答案

问题是那些 add 函数在 JVM 类型删除后无法区分:在执行期间它们都是 (Int, Int)Int。但是它们在编译期间是不同的,Scala 编译器可以告诉您调用的是哪一个。

这意味着您必须使它们的参数列表不同。为此,您可以添加一个带有 DummyImplicit 参数的隐式参数列表:

def add(x: Int, y: Int)(implicit dummy: DummyImplicit): Int = x + y
def add(x: Int)(y: Int): Int = x + y

这个DummyImplicit 是由Scala 库提供的,它总是有一个隐式值。现在删除后第一个函数的类型是(Int, Int, DummyImplicit)Int,第二个是(Int, Int)Int,所以JVM可以区分它们。

现在您可以调用两者:

add(1, 2)
add(1)(2)

关于Scala 重载函数添加柯里化(Currying)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36995312/

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