Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala动态类型_Scala_Generics_Types_Type Parameter - Fatal编程技术网

Scala动态类型

Scala动态类型,scala,generics,types,type-parameter,Scala,Generics,Types,Type Parameter,printall的使用应与main方法中所述的相同。但在编译过程中,我得到了以下错误: object BugFixProject { def main (args: Array[String]) { val repoWithEntities = Seq( (ARepo, Seq(A("", ""), A("", ""))), (BRepo, Seq(B("", ""), B("", ""))) ) printall(repoWithEnti

printall的使用应与main方法中所述的相同。但在编译过程中,我得到了以下错误:

object BugFixProject {

  def main (args: Array[String]) {
    val repoWithEntities = Seq(
      (ARepo, Seq(A("", ""), A("", ""))),
      (BRepo, Seq(B("", ""), B("", "")))
    )

    printall(repoWithEntities)
  }

  def printall[Entity](pairs: Seq[(BaseRepo[Entity], Seq[Entity])]) : Seq[String] = {
    pairs.map { t =>
      val repo = t._1
      val entities = t._2

      entities.map(repo.toString(_))
    }.flatten
  }

}

case class A(foo: String, bar: String){}
case class B(foo: String, bar: String){}

trait BaseRepo[X] {
  def toString(x: X) : String = x.toString
}

object BRepo extends BaseRepo[B] {}
object ARepo extends BaseRepo[A] {}

实体只能是1个特定类型

尝试以非常通用的方式进行函数调用,如下所示

def printall[Entity]

通过这种方式,您可以使用
BRepo
ARepo
对象调用
printall
方法。

如果您知道方法中的内容,则不需要类型参数
Entity
。现在还不清楚你想在这里做什么,你有没有试着重写一下你的代码让它更清晰?嗯。我不知道如何澄清。。。我希望
printall
可以通过
repoWithEntities
调用,但不知道方法签名的外观
printall
应该可以调用类型为
Seq[(BaseRepo[Entity],Seq[Entity])]
的值,其中的“Entity”表示元组必须包含具有相同类型序列的BaseRepo。如示例所示,repoWithEntities可以具有包含不同类型的不同Repo的元组。在对
printall
的任何单个调用中,是的,
Entity
必须是特定的某种类型。是否可以更改符号以使每次调用不限于一种类型?但这样就可以拥有一对
(ARepo,Seq(B(“,”)
这在
printall
中是不允许的。这可能是您的解决方案不可编译的原因。
Error:(12, 18) type mismatch;
 found   : Seq[(BaseRepo[_ >: B with A <: Product with Serializable], Seq[Product with Serializable])]
 required: Seq[(BaseRepo[Entity], Seq[Entity])]
        printall(repoWithEntities)
                 ^
def printall[Entity]
  def printall(pairs: Seq[(BaseRepo[_], Seq[_])]) : Seq[String] = {