簡體   English   中英

Scala:在方法中使用TypeTag

[英]Scala: Using TypeTag in a method

我正在嘗試編寫這樣的方法:

def foo[T:TypeTag](value: Int):String = {
  (/* do something */).mapTo[T].map(_.toJson)
}

其中mapTo具有簽名:

def mapTo[S](implicit tag: ClassTag[S]): Future[S] = { ... }

使用org.scala-lang.scala-reflect能夠執行以下操作:

foo[String](1)foo[List[Double]](10)等。

我嘗試以不同的方式編寫它,但是遇到了不同的編譯錯誤。 有什么辦法可以使類似的東西起作用嗎?

Error:(26, 45) Cannot find JsonWriter or JsonFormat type class for T
    (/* do something */).mapTo[T].map(_.toJson)
                                            ^
Error:(26, 45) not enough arguments for method toJson: (implicit writer: spray.json.JsonWriter[T])spray.json.JsValue.
Unspecified value parameter writer.
    (/* do something */).mapTo[T].map(_.toJson)
                                        ^

此鏈接如何同時從TypeTag獲得ClassTag或同時獲得二者? 不清楚我要做什么。 似乎試圖“過濾”有關某個類的某些信息。

如果您需要的是ClassTag那么為什么不更改foo的方法以擁有ClassTag 像這樣:

def foo[T](value: Int)(implicit ev: ClassTag[T]): String ={ ...

這似乎可以滿足您聲明隱式范圍中存在ClassTag基本需求。

編輯

您所顯示的內容與ClassTag無關,並且與它缺少JsonWriterJsonFormat的隱式事實JsonFormat 您可能缺少導入內容以將其納入范圍。

讀取錯誤: mapTo有效。 toJson ,不是,它不應該:您不能將任何帶有TypeTag T轉換為JSON。 只需要求T必須具有JsonWriterdef foo[T: TypeTag: JsonWriter](value: Int) = ... 您還將獲得Future[String]而不是String

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM