簡體   English   中英

無法訪問內部PartialFunction中的泛型函數類型

[英]Can't access generic function type in a inner PartialFunction

我目前正在編寫一個通用函數來執行Dispatch異步請求,但無法在Dispatch處理程序中訪問通用類型:

private def execQuery[MessageType](query : Req, errorMsg : String)
{
    Http(query OK as.String).either
        .onSuccess
    {
        case Left(error) => println(errorMsg)
        case Right(json) => println( new MessageType(json) ) // error here
    }
}

我在新MessageType上出錯:“新MessageType(json)”中的“無法解析符號MessageType”。 你能幫助我嗎 ?

先感謝您

勝利者

編輯:我在這里找到了另一種有趣的方式http://www.brentsowers.com/2011/11/writing-generic-functions-that-take.html 您必須使用清單功能:

class DynamicTestClass() {
    def output() {
        println("Hello from a dynamically sent class")
    }
}

def testFunc[T : Manifest]() : T = {
    manifest[T].erasure.newInstance().asInstanceOf[T]
}
val dynamicTestClassInstance = testFunc[DynamicTestClass]()
dynamicTestClassInstance.output()

看來可行!

你做不到

def mustMakeA[A](b:String):A = new A(b)

在斯卡拉。

一些實際的原因。 scalac應該如何知道A是否具有公共構造函數及其參數?

但是,您可以使用更智能的設計,例如,一個“知道”如何構造參數的類型類:

class Message(val value:String)

trait Constructor[A] {
   def cons(b:String) 
}

implicit class MessageHasConstructor(m:Message) extends Constructor[Message] {
   def cons(b:String) = new Message(b)
}

mustMakeA ,現在我們將mustMakeA重寫為:

def mustMakeA[A:Constructor](b:String):A = implicitly[Constructor[A]].cons(b)

mustMakeA[Message]("Example") // would give us a `new Message("Example")`

順便說一句,我沒有測試代碼,因此可能需要進行一些調整。

暫無
暫無

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

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