Ja, es gibt einen Unterschied, aber wichtiger ist, dass der Ansatz zur Bildung der Zeichenfolge auf diese Weise fehlgeleitet ist.
Es gibt keine speziellen (verzögert) Bewertungsregeln für den Befehl convert
, und was das Routine sieht als erstes Argument hier ist das Ergebnis der (noncommutating) Multiplikation des Namen file
mit dem Namen ext
. Und so ist das nicht wirklich eine gute Art, zu einer Zeichenkette zu verketten, denn es ist nicht der Zweck, sie zuerst sorgfältig zu verketten.
Es gibt Alternativen. Sie könnten mit einem einzelnen Namen verketten und diesen dann in eine Zeichenfolge konvertieren, oder Sie könnten direkt mit einer Zeichenfolge verketten (für die der Befehl convert/string nicht optimal ist).
# I'm supposing that one does want the name`file` assigned
file:=myproject:
# Now suppose that one wants the result "myproject.for"
ext:=`for`:
convert(file.ext,string); # whoops
"myproject . `for`"
cat(file,".",ext); # produces the name `myproject.for`
myproject.for
convert(%,string);
"myproject.for"
sprintf("%a.%s",file,ext);
"myproject.for"