Scala:两个隐式清单

Scala: Two implicit manifiests

假设我在 class:

中有这个函数
  def serializeObject[O<:MongoModel, F<:FunnelJob](mongoObject:O):F = {
    grater[F].asObject(mongoObject)
  }

我将无法编译它,因为我需要 O 和 F 的清单。但我无法实际使用隐式清单调用

  def serializeObject[O<:MongoModel, F<:FunnelJob](mongoObject:O)(implicit mf:Manifest[O], implicit m:Manifest[F]):F = {
    grater[F].asObject(mongoObject)
  }
例如,

无效。我怎样才能拥有两个具有两个清单的泛型?

您只需要一个 implicit 关键字,它适用于此上下文中的整个参数列表:

def serializeObject[O<:MongoModel, F<:FunnelJob](mongoObject:O)(implicit mf:Manifest[O], m:Manifest[F]):F

旁注:

  1. 你可能不需要Manifest[O]

  2. 调用时需要显式提供类型参数或有明确的预期类型,否则F会被推断为Nothing;

  3. Manifests 是半弃用的,在大多数情况下应由 ClassTagTypeTag 代替。见 http://docs.scala-lang.org/overviews/reflection/typetags-manifests.html.