具有各种输入数据类型的scala函数

时间:2016-05-06 13:42:29

标签: scala apache-spark functional-programming

有没有办法在scala中创建一个函数,我可以输入各种类型的参数输入?请参阅下面的示例代码。我想将下面的代码变成一个函数,它可以接受输入的各种数据类型。

示例:

/** */
def toMatrix(A: Array[Double], m:Int, n:Int): Array[Array[Double]] = {
    var A_ = Array.apply(A.slice(0,n),A.slice(n*1,n*1+n))
    for (i <- 2 to (m-1)){
        A_ = A_ ++ Array(A.slice(n*i,(n*i)+n))
        }
    A_
}


/** */
def toMatrixInt(A: Array[Int], m:Int, n:Int): Array[Array[Int]] = {
    var A_ = Array.apply(A.slice(0,n),A.slice(n*1,n*1+n))
    for (i <- 2 to (m-1)){
        A_ = A_ ++ Array(A.slice(n*i,(n*i)+n))
        }
    A_
}

/** */
def toMatrixBoolean(A: Array[Boolean], m:Int, n:Int) = {
    var A_ = Array.apply(A.slice(0,n),A.slice(n*1,(n*1)+n))
    for (i <- 2 to (m-1)){
        A_ = A_ ++ Array(A.slice(n*i,(n*i)+n))
        }
    A_
}

2 个答案:

答案 0 :(得分:3)

是。而你也不需要可变变量和丑陋的命令循环:) 如果您使用scala语法,可能需要花一两个时间来学习使用该语言:/

def toMatrix[T : ClassTag](a: Array[T], m:Int, n:Int) = a.grouped(n).toArray

答案 1 :(得分:1)

显然,你在谈论Java世界中的类型参数化或泛型。你应该去阅读它 - 互联网和书籍上有很多关于这个主题的信息。 alvinalexander.com的一些例子:

http://alvinalexander.com/scala/scala-classes-using-generic-types-examples

我个人推荐Martin Odersky等人的“Scala编程”一书。它现在略显陈旧,但它写得很完美,并且完全覆盖了语言。