implicit class Interpolator(val a: StringContext) extends AnyVal {
def foo[A](args: Any*): A = ???
}
val first = foo[String]"myString" // This does not parse
val second = (new StringContext).foo[String]("myString") // This works but I'm wondering if there is a more concise syntax
val third = foo"myString"[String] // This one is intriguing because it parses but the compiler outputs "method foo does not take type parameters"... what?
Wenn A
geschlossen werden kann, dann es ist alles gut, weil foo"myString"
einfach funktionieren, aber wenn es nicht kann ich frage mich, ob es eine bessere ist Syntax als second
zu spezifizieren, dass erlaubt mir, den Typparameter zu spezifizieren, den ich erwarte.Ist es möglich, Typ Parameter für String-Interpolation in Scala
arbeiten ist, wie man Liefertargumente bei Verwendung der Stringinterpolatorsyntax. Obwohl das Verhalten des ersten Codebeispiels tatsächlich ungerade ist, gebe ich zu. – jedesah
Weil ein neuer Interpolator für jeden Lauf von foo erstellt wird, dann liefern die Typargumente zu Interpolator dasselbe wie sie an foo liefern. In meinem Beispiel werden sie implizit geliefert ... (indem sie einem int val zugewiesen werden). Also ist es eine Antwort auf Ihre Frage, wenn ich etwas verpasse, können Sie ein Code-Beispiel liefern, so schlecht zu verstehen, was Sie versuchen zu tun? – oron
Ich verstehe. Aber das Typargument muss noch gefolgert werden, weshalb ich frage: Wie kann es spezifiziert werden? Ich wünschte, es könnte einfach in dem Fall abgeleitet werden, mit dem ich es zu tun habe, da es die Dinge für mich viel einfacher machen würde, aber leider ist das nicht der Fall. Aber ich bin jetzt neugierig, warum sich das zweite Beispiel anders als das erste verhält? Was passiert im ersten Fall, um das unerwartete Ergebnis zu erzielen? – jedesah