Scala:将一个函数内部的数组作为参数

时间:2014-05-05 22:43:59

标签: scala

我正在尝试定义一个数字数组,最后一个是函数。举个例子可能会更好:

def myArrayFunc(foo:String, bar:Array[Int[Function1]]) // ?
myArrayFunc("foo", (1,2,3 (myFunction)))

使用Scala可以吗?如果是这样,怎么样?

提前致谢。

3 个答案:

答案 0 :(得分:2)

您提出的问题是荒谬的,因为函数不是数字。但如果你的意思是数字和函数,那么你可以这样做:

def myArrayFunc(foo:String, bar: Array[Either[Int, Function1[A, B]]])

或者如果你更喜欢效率而不是类型安全:

def myArrayFunc(foo:String, bar: Array[Any])

但这样做更有意义:

def myArrayFunc(foo:String, bar: Array[Int], f: Function1[A, B])

AB替换为上面的相应类型。

答案 1 :(得分:1)

是的,但是你不能使用Array;你需要像Vector这样的东西。这在这里进一步回答:How do I create a heterogeneous Array in Scala?

答案 2 :(得分:0)

只要函数返回Array[Int],您就可以使用作为函数的元素定义Int,因为Scala Array中的所有元素必须具有相同的类型。

def myArrayFunc(foo:String, bar:Array[Int]) = bar.map(_ + foo) 

scala> def plusOne(i:Int) = i + 1
plusOne: (i: Int)Int

scala> myArrayFunc("foo", Array(1,2,plusOne(2)))
res22: Array[String] = Array(1foo, 2foo, 3foo)