我正在尝试定义一个数字数组,最后一个是函数。举个例子可能会更好:
def myArrayFunc(foo:String, bar:Array[Int[Function1]]) // ?
myArrayFunc("foo", (1,2,3 (myFunction)))
使用Scala可以吗?如果是这样,怎么样?
提前致谢。
答案 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])
将A
和B
替换为上面的相应类型。
答案 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)