【问题标题】:Scala: Taking an array with one function inside as an argumentScala:将一个包含一个函数的数组作为参数
【发布时间】:2014-06-22 09:13:32
【问题描述】:

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

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

这可能使用 Scala 吗?如果有,怎么做?

提前致谢。

【问题讨论】:

    标签: scala


    【解决方案1】:

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

    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 替换为上述适当的类型。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • Array 工作得很好:val a = Array(1, 2, (x: Int) => x)。接受的链接答案是错误的。
      【解决方案3】:

      只要函数返回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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-18
        • 2013-03-21
        • 1970-01-01
        • 2013-04-13
        • 2018-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多