如何在不重复类型的情况下定义函数类型别名的值?

How to define value of function type alias without repeating the types?

给定函数类型别名:

type Func = (Int, Double) => String

我想定义一个这样的函数,一种方法是

val foo: Func = (n: Int, d: Double) => n.toString + " " + d.toString

但是我试图了解是否有一种类似于访问元组的更简洁的方式,而无需在已知类型时再次明确命名参数,例如(假设)

val foo: Func = _1.toString + " " + _2.toString

有没有什么东西可以做到这一点?它会为我节省大量的输入,并使我的代码更具可读性。

是的。

val foo: Func = _.toString + " " + _.toString 

您必须意识到参数 nd 不构成 Tuple,而是独立的。要成为一个元组,类型应该是 ((Int, Double)) => String ,注意附加的括号。

您始终可以使用普通的 shorthand 表示法,它按顺序遍历参数:

val foo: Func = _ + " " + _

如果这还不够通用,您只需命名参数,无需再次提供它们的类型:

val foo: Func = (x,y) => (x + (x + y*y)).toString