Hallo dort Stack-Überlauf,def fn [Zeichenfolge] scheint hier Scala/java.lang.String Kompatibilität
Ich hoffe, dass Sie mir helfen, mit meiner ersten Frage zu brechen :)
Also ich Ich habe ein Problem mit der Inferenz von Scala. Hier ist der Code:
object Problem {
def ok(fn: (String) => Unit) = fn("")
// type mismatch; found: java.lang.String("") required: String
def fail[String](fn: (String) => Unit) = fn("")
}
Welche Art von String erwartet Scala hier?
Beachten Sie, dass dies ein minimales Beispiel ist, um mein Problem zu erklären. Das ursprüngliche Problem tauchte auf, als ich versuchte, eine komplexere Schnittstelle zu implementieren (Play's Iteratee, um genau zu sein), also, nein, [String]
ist keine Option. (Wenn jemand denkt, dass der tatsächliche Code helfen würde, werde ich es bereitstellen.)
Ich versuchte def fail[java.lang.String] ...
, aber dann heißt es expected ], found .
.
habe ich Scala String vs java.lang.String - type inference gelesen, die auf java.lang.String
vs. scala.Predef.String
eine gute Erklärung gibt, aber ich konnte immer noch nicht mit einer Lösung für mein spezielles Problem kommen.
Irgendwelche Ideen?
EDIT: So, hier ist der ursprüngliche Versuch, wie ich versuchte nur zu implementieren http://www.playframework.org/documentation/api/2.0/scala/play/api/libs/iteratee/Iteratee.html, dass ich String
statt T
schrieb. (Mit T
kompiliert es, und es macht Sinn!) Mein Fehler; offensichtlich war ich ein bisschen von allen Typ Parameter überwältigt:
val stream = WS.url("url").get({ headers =>
(new Iteratee[Array[Byte], String] {
def fold[T](done: (String, Input[Array[Byte]]) => Promise[T],
cont: (Input[Array[Byte]] => Iteratee[Array[Byte], String]) => Promise[T],
error: (String, Input[Array[Byte]]) => Promise[T]): Promise[T] =
{
done("something", Input.Empty)
}
})
})
Grüße, Hendrik
Danke, ziemlich offensichtlich jetzt, dass Sie es sagen ...: | – Hendrik
Diese Antwort ist korrekt, ich habe @ submonoid's gewählt, um mit der Signatur meiner Methode zu arbeiten, die ich nicht ändern kann. – Hendrik
@Hendrik - Die Signatur macht keinen Sinn, soweit ich das beurteilen kann. Warum kannst du es nicht ändern? Was muss die Unterschrift sein? (Könnten Sie sich irren darüber, was es sein muss?) –