【问题标题】:Scala - Type Mismatch Found Unit : required Array[Int]Scala - 找到类型不匹配的单元:必需的数组 [Int]
【发布时间】:2014-02-04 15:48:03
【问题描述】:

为什么该方法在 NetBeans 中会出现编译错误

(有问题的错误 - 发现单元类型不匹配:必需的 Array[Int])

  def createArray(n:Int):Array[Int] =
  {
      var x = new Array[Int](n)
      for(i <- 0 to x.length-1)
        x(i) = scala.util.Random.nextInt(n)
  }

我知道如果有 if 子句 - 而没有 else 子句 - 那么为什么我们会得到类型不匹配。

但是,我无法解决上述错误 - 除非我添加此行

返回 x

错误没有发生,因为编译器认为如果 n

想法?

【问题讨论】:

  • 函数中的最后一条语句for 返回Unit,但返回类型为Array[Int]。因此错误。所以只需将x 作为函数中的最后一条语句。在下面查看@Lee 的答案。

标签: scala types mismatch


【解决方案1】:

您的 for 理解将被转换为:

0.to(x.length - 1).foreach(i => x(i) = scala.util.Random.nextInt(i))

由于foreach返回(),你的for推导的结果是(),所以整个函数的结果是(),因为它是最后一个表达式。

您需要返回数组 x:

for(i <- 0 to x.length-1)
        x(i) = scala.util.Random.nextInt(n)
x

【讨论】:

    【解决方案2】:

    还有一个,

    def createArray(n: Int): Array[Int] = Array.fill(n) { scala.util.Random.nextInt(n) }
    

    那么,例如

    val x: Array[Int] = createArray(10)
    

    【讨论】:

      【解决方案3】:

      在我看来,您可以使用 yield 做一些更清洁的事情:

      def createArray(n:Int):Array[Int] =
        (for(i: Int <- 0 to n-1) yield scala.util.Random.nextInt(n)).toArray
      

      这将产生一个“单行函数”

      【讨论】:

        猜你喜欢
        • 2015-04-03
        • 1970-01-01
        • 1970-01-01
        • 2022-10-13
        • 1970-01-01
        • 1970-01-01
        • 2014-09-26
        • 1970-01-01
        • 2021-11-08
        相关资源
        最近更新 更多