如何在不重复类型的情况下定义函数类型别名的值?
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
您必须意识到参数 n
和 d
不构成 Tuple
,而是独立的。要成为一个元组,类型应该是 ((Int, Double)) => String
,注意附加的括号。
您始终可以使用普通的 shorthand 表示法,它按顺序遍历参数:
val foo: Func = _ + " " + _
如果这还不够通用,您只需命名参数,无需再次提供它们的类型:
val foo: Func = (x,y) => (x + (x + y*y)).toString
给定函数类型别名:
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
您必须意识到参数 n
和 d
不构成 Tuple
,而是独立的。要成为一个元组,类型应该是 ((Int, Double)) => String
,注意附加的括号。
您始终可以使用普通的 shorthand 表示法,它按顺序遍历参数:
val foo: Func = _ + " " + _
如果这还不够通用,您只需命名参数,无需再次提供它们的类型:
val foo: Func = (x,y) => (x + (x + y*y)).toString