Scala的重载函数增加了curring?

m0meni

今天开始学习Scala,我很好奇您是否可以重载函数以添加curring,例如:

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

但是,不仅此代码无法编译,而且我听说Scala中的重载不是一个好主意。

有没有办法超载加,使得它没有做部分应用程序,这意味着既咖喱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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scala的重载函数增加了curring?

来自分类常见问题

UICollectionView增加了最高利润

来自分类Dev

启动图像增加了利润

来自分类Dev

更少的变量增加了意外的空间

来自分类Dev

Python纸浆增加了罚款

来自分类Dev

Laravel资源给路由增加了参数

来自分类Dev

为什么TTransportException突然增加了?

来自分类Dev

我的时间增加了1天

来自分类Dev

包装的图像增加了空间

来自分类Dev

Javascript增加了动画制作的延迟

来自分类Dev

归档程序,增加了冗余

来自分类Dev

Spring集成增加了并行度

来自分类Dev

虽然循环增加了想要的结果?

来自分类Dev

熊猫增加了列级别,从而增加了列总数

来自分类Dev

为什么我的函数静态变量尽管增加了却从未改变过?

来自分类Dev

是否增加了定义明确的空指针?

来自分类Dev

iOS Google Analytics(分析)的大小增加了吗?

来自分类Dev

Flexbox的输入元素在Webkit中增加了额外的间距

来自分类Dev

内联表单输入的宽度增加了吗?

来自分类Dev

UITableViewCell systemLayoutSizeFittingSize增加了额外的0.5 px

来自分类Dev

Moment.js问题增加了夏令时

来自分类Dev

MVC 5路由增加了额外的斜线

来自分类Dev

尽管增加了PHP内存限制,但耗尽了内存

来自分类Dev

SAS增加了对纵向数据的新观察

来自分类Dev

IP地址在C#中增加了控制方式

来自分类Dev

奇怪的结果增加了超过最大值的时间

来自分类Dev

css旋转的<input>标签增加了td中的空间

来自分类Dev

主义增加了不必要的自我连接

来自分类Dev

jQuery解包增加了休息时间