Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 2.12,实例化类型参数?_Scala_Types - Fatal编程技术网

Scala 2.12,实例化类型参数?

Scala 2.12,实例化类型参数?,scala,types,Scala,Types,已经有关于我想做什么的信息了,但还没弄清楚。我想实例化作为上下文绑定传递的类型的元素,如下所示: case class Person(name: String) case class Dog(name: String) abstract case class Message[T](result: Map[String, T]) // using Person as a type here case class PersonMessage(val result: Map[String, Per

已经有关于我想做什么的信息了,但还没弄清楚。我想实例化作为上下文绑定传递的类型的元素,如下所示:

case class Person(name: String)
case class Dog(name: String)

abstract case class Message[T](result: Map[String, T])

// using Person as a type here
case class PersonMessage(val result: Map[String, Person]) extends Message[Person](result)

// using Dog as a type here
case class DogMessage(val result: Map[String, Dog]) extends Message[Dog](result)
我当然可以实例化这些对象:

val pm: PersonMessage = PersonMessage(Map("joe" -> Person("joe")))
val dm: DogMessage = DogMessage(Map("blacky" -> Dog("blacky")))
但是我可以在泛型函数中这样做吗

// should return a PersonMessage or a DogMessage
def myfunction[T, U <: Message[T]](customName: String): U = {
  U(Map(customName -> T(customName)))
}

val p: PersonMessage = myFunction[Person, PersonMessage]("joe")
val d: DogMessage = myFunction[Dog, DogMessage]("blacky")
//应返回PersonMessage或DogMessage
def myfunction[T,U T(customName)))
}
val p:PersonMessage=myFunction[Person,PersonMessage](“joe”)
val d:DogMessage=myFunction[Dog,DogMessage](“blacky”)

这个语法不起作用,但是还有其他方法可以实现吗?谢谢你的提示。

问题是,通过定义类型
t
U谢谢Joe!我唯一要做的另一件事是将基类设为类(而不是case类),因为它们是不可扩展的。
def myFunction[T, U <: Message[T]](customName: String, mkT: String => T, mkU: Map[String, T] => U): U = {
  mkU(Map(customName -> mkT(customName)))
}

val p: PersonMessage = myFunction("joe", Person, PersonMessage)
val d: DogMessage = myFunction("blacky", Dog, DogMessage)