繁体   English   中英

获取函数中的类型不匹配错误作为scala中的参数

[英]Getting Type Mismatch error in function as parameter in scala

当我通过传递函数作为参数从n_shuffle调用in_shuffle方法时,我在 scala 中遇到了一些类型不匹配的问题。

  def in_shuffle[T](original: List[T], restrict_till:Int= -1):List[T]={

    require(original.size % 2 == 0, "In shuffle requires even number of elements")
    def shuffle(t: (List[T], List[T])): List[T] =
      t._2 zip t._1 flatMap { case (a, b) => List(a, b) }

    def midpoint(l: List[T]): Int = l.size / 2

    @annotation.tailrec
    def loop(current: List[T], restrict_till:Int, count:Int=0): List[T] = {
      if (original == current || restrict_till == count) current
      else{
        val mid         = midpoint(current)
        val shuffled_ls = shuffle(current.splitAt(mid))
        loop(shuffled_ls, restrict_till, count+1)
      }
    }
    loop(shuffle(original.splitAt(midpoint(original))), restrict_till, 1)
  }

def n_shuffle[T](f: (List[T], Int) => List[T], list:List[T], n:Int):List[T]={
  println("Inside Sub-function")
  f(list, n)
}

这是我在main调用n_shuffle的方式

print( n_shuffle(in_shuffle, (1 to 8).toList, 2) )

我得到的错误是

Error:(161, 22) type mismatch;
 found   : (List[Nothing], Int) => List[Nothing]
 required: (List[Int], Int) => List[Int]
    print( n_shuffle(in_shuffle, (1 to 8).toList, 2) )

任何帮助将不胜感激。 谢谢

尝试多个参数列表来帮助类型推断

def n_shuffle[T](list: List[T], n: Int)(f: (List[T], Int) => List[T]): List[T]
n_shuffle((1 to 8).toList, 2)(in_shuffle)

或提供显式类型注释

n_shuffle(in_shuffle[Int], (1 to 8).toList, 2)
n_shuffle[Int](in_shuffle, (1 to 8).toList, 2)

编译器无法推断第一个参数的类型的原因

def n_shuffle[T](f: (List[T], Int) => List[T], list: List[T], n: Int)

是因为它会从(1 to 8).toList获取它,但是这是第二个参数。

似乎这种情况下的推理没有按预期工作。 强制 in_shuffle[Int] 方法中的类型可以解决问题。

试试这个。

print(n_shuffle(in_shuffle[Int], (1 to 8).toList, 2))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM