【发布时间】:2014-06-22 09:13:32
【问题描述】:
我正在尝试定义一个数字数组,其中最后一个是一个函数。举个例子可能会更好:
def myArrayFunc(foo:String, bar:Array[Int[Function1]]) // ?
myArrayFunc("foo", (1,2,3 (myFunction)))
这可能使用 Scala 吗?如果有,怎么做?
提前致谢。
【问题讨论】:
标签: scala
我正在尝试定义一个数字数组,其中最后一个是一个函数。举个例子可能会更好:
def myArrayFunc(foo:String, bar:Array[Int[Function1]]) // ?
myArrayFunc("foo", (1,2,3 (myFunction)))
这可能使用 Scala 吗?如果有,怎么做?
提前致谢。
【问题讨论】:
标签: scala
您所说的问题是荒谬的,因为函数不是数字。但如果你的意思是一个数字数组和一个函数,那么你可以这样做:
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 替换为上述适当的类型。
【讨论】:
可以,但您不能使用Array;你需要像Vector 这样的东西。在这里进一步回答:How do I create a heterogeneous Array in Scala?
【讨论】:
Array 工作得很好:val a = Array(1, 2, (x: Int) => x)。接受的链接答案是错误的。
只要函数返回Int,您就可以用一个函数元素定义Array[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)
【讨论】: