我只是不了解如何从以前的函数构建函数。
例如,math.min()
函数至少需要两个数字。如果我想创建一个函数min3Z(a:int, b:int, c:Int)
怎么办?我如何从min
构建此内容?
答案 0 :(得分:7)
你的问题不清楚。您是否只是想在math.min()
中使用min3Z()
?因为在这种情况下,你可以这样做:
def min3Z(a: Int, b: Int, c: Int) = math.min(a, math.min(b, c))
如果要传入任意函数(例如,使其可以指定max或min),可以将函数指定为参数:
def min3Z(a: Int, b: Int, c: Int, f: (Int, Int) => Int) = f(a, f(b, c))
Scala中的语法(Int, Int) => Int
是一个函数的类型,它接受类型Int
的两个参数并返回类型Int
的结果。 math.min()
和math.max()
都符合此标准。
这允许您将min3Z称为min3Z(1, 2, 3, math.min)
或min3Z(1, 2, 3, math.max)
。甚至可以制作min3Z()
版本,其中Int
和(Int, Int) => Int
函数具有任意数量,但这超出了您的范围问题
答案 1 :(得分:0)
如果针对三个值实现min
是您的特定情况,您可能希望通过使用variadic(aka varargs)函数推广到任意数量的参数,如下所示:
def min(xs: Int*): Int = xs.min
在这种情况下,可变参数语法在类型声明之后用*
符号表示 - Int
。这样所有以下调用都可以工作:
min(1, 2)
min(1, 2, 3, 4, 5, 6, -1)
// and so on...
谈到通用性,您还可以编写一个更通用的min
,它接受任何数字类型,而不仅仅是Int
个:
def min[T : Numeric](xs: T*): T = xs.reduceLeft(implicitly[Numeric[T]].min)
使用如下:
min(1, 2, 3, 4)
min(1.2, 3.4, 5.6, 4.2)