【发布时间】:2018-04-07 07:20:06
【问题描述】:
我想定义一个简单的 lambda,三个整数相加:
(int a, int b,int c)->a+b+c
对于这个简单的案例,我有两个选择:
定义一个功能接口。单个抽象方法应该是
int add(int a, int b,int c),方法名和变量名无所谓。使用方法参考。我必须定义一个类/方法或使用具有签名
int add(int a, int b,int c) 的现有方法
在这两种情况下,对于非常简单的 lambda,我必须回到 OOP 世界(接口、类等)
但是在scala中,在原地定义一个函数是非常简单的:
val add= (a:Int,b:Int,c:Int)=>a+b+c
【问题讨论】:
-
实际上,在 Scala 中也是如此。 lambda 需要有对应的接口。不同之处在于 Scala 标准库已经包含许多这样的接口,即
Function0...Function22特征。 Java 标准库也包含许多预制接口,只是数量少得多。 (而且,由于void和原语,需要更多。例如,Scala 中有 one 接口用于具有 2 个参数的函数,但在 Java 中,您需要 810 个接口来实现相同的东西。) -
Scala 有两个很棒的东西,它们对最终用户非常友好。 1. 用户可以直接使用 X=>Y 作为函数类型 2. 原始类型 int,..void 都是抽象过来的,所以对最终用户来说没有太多多余的东西。