了解 Scala 中的 Array.fill 方法签名



我在理解Array.scala中的以下方法签名时遇到了一些麻烦:

def fill[T: ClassTag](n1: Int, n2: Int)(elem: => T): Array[Array[T]]

我已经从这里阅读了多态方法的概念:http://www.scala-lang.org/old/node/121.html

fill的方法似乎确实按带有值参数的类型T进行参数化。不过,这里的方法签名让我感到困惑。它似乎是一个接受多个参数的"柯里函数",但随后有两个参数n1n2在一个括号中,一个函数作为第二个参数传入。这就像一个高阶函数被传递到fill。但这看起来也不太对劲。

如果有人能用线索为我指出正确的方向,我可以更多地了解fill方法的工作原理,例如方法主体。

您在此处引用的方法创建并填充二维数组。 前 2 个参数,Int s,指示数组的尺寸(X 和 Y 轴)。

第三个参数位于单独的参数组中。这是咖喱的部分。 如果它是fill(n1, n2, elem)写的,那么它就不是一个柯里的方法。 或者所有参数都可以被柯里化:fill(n1)(n2)(elem). 在Haskell中,所有参数都是柯里化的。

elem: => T表示法表示这是一个"按名称"参数。 它看起来类似于函数定义,但事实并非如此。 它只是意味着接收到的参数 elem 在调用时不被计算。 它在引用时被评估,这可能永远不会。 例如:

Array.fill(x,y)(/*some-long-calculation*/)

在这种情况下,如果xy为零,则不执行"多头计算"。

最新更新