2016-05-10 4 views
1

Es scheint ",", "$", "/" alle dienen als ein Trennzeichen, aber "_" nicht.Was ist das Standardtrennzeichen für die String-Interpolation?

x = "1" 
"$x,x", "$x$x", "$x/1", "$x_1" 

Gibt es ein Dokument darüber?

+0

Wenn Sie sicherstellen möchten, dass die Interpolation beendet ist, verwenden Sie einfach() um den Namen, d. H. "$ (Myname)". Dies kann wichtig sein, wenn dem Bezeichner einige Unicode-Zeichen folgen, die zu einem bestimmten Zeitpunkt geändert werden können, um als Bezeichnerzeichen im Parser zugelassen zu werden. –

Antwort

2

Die doc says:

Der kürzeste vollständige Ausdruck nach dem $ als Ausdruck, dessen Wert genommen wird, ist in den in den github issue #455 erklären

Die internen Abläufe String interpoliert werden, die könnten zusammengefasst werden von:

Die Art, wie String-Interpolation funktioniert, ist in Julia eigentlich vollständig definiert. Was passiert ist, dass der Parser (in FemtoLisp) den Code scannt und ein String-Literal findet, das durch doppelte Anführungszeichen begrenzt wird. Wenn es in der Zeichenkette kein unescaped $ findet, erstellt es nur ein Zeichenkettenliteral selbst - ASCIIString oder UTF8String abhängig vom Inhalt der Zeichenkette. Auf der anderen Seite, wenn die Zeichenkette ein unescaped $ hat, springt sie und übergibt die Interpretation des Zeichenkettenliterals an den julia-Makro, der einen Ausdruck erzeugt, der die gewünschten Zeichenketten durch Verketten von Zeichenkettenliteralen und interpolierten Werten konstruiert. Dies ist ein schönes, elegantes Schema, bei dem sich der Parser keine Gedanken über Interpolationen machen muss.

Ich könnte vermuten, dass #\, #\) #\] #\} #\; die , sind, ), ], } und ; jeweils Token für Ausdrücke schließen und $ wird, um den Beginn der nächsten Interpolation angibt.

+1

Dies ist nicht mehr wahr - der Julia-Parser behandelt heutzutage tatsächlich die gesamte Interpolation selbst. Dies war die einzige Möglichkeit, Dinge wie das Interpolieren von Ausdrücken, die selbst String-Literale enthielten, zuzulassen. Aber ausgezeichnete GitHub Archäologie :-) – StefanKarpinski

+0

@StefanKarpinski Können Sie meine Antwort bearbeiten, um die aktuelle Antwort zu geben? –

4

Ich glaube, das liegt daran, dass x_1 ein gültiger Variablenname in Julia ist, also versucht es, den Wert dieser Variablen in die Zeichenfolge einzufügen.