Druckertyp in F #, statische vs dynamische Zeichenfolge

Ich habe gerade angefangen, mit F # in Mono herumzuspielen, und das folgende Problem ist aufgetreten, das ich nicht ganz verstehe. Informationen zu suchenprintfn undTextWriterFormat brachte auch keine Erleuchtung, also dachte ich, ich werde hier fragen.

In FSI führe ich Folgendes aus:

> "hello";;
val it : string = "hello"
> printfn "hello";;
hello
val it : unit = ()

Nur eine normale Zeichenfolge und Drucken. Fein. Jetzt wollte ich eine Variable deklarieren, die dieselbe Zeichenfolge enthält, und sie auch drucken:

> let v = "hello" in printfn v ;;
let v = "hello" in printfn v ;;
---------------------------^
\...\stdin(22,28): error FS0001: The type 'string' is not compatible with the type 'Printf.TextWriterFormat<'a>'

Ich habe das aus meiner Lektüre verstandenprintfn erfordert eine konstante Zeichenfolge. Ich verstehe auch, dass ich dieses Problem mit so etwas umgehen kannprintfn "%s" v.

Ich würde jedoch gerne verstehen, was mit dem Tippen hier los ist. Deutlich,"hello" ist vom Typstring ebenso gut wiev ist. Warum gibt es dann ein Typproblem? Istprintfn etwas Besonderes? Soweit ich weiß, führt der Compiler bereits eine Typprüfung der Argumente des ersten Strings durch, so dassprintfn "%s" 1 fehlschlägt .. dies könnte natürlich nicht mit dynamischen Zeichenfolgen funktionieren, aber ich nahm an, dass dies für den statischen Fall nur eine Bequemlichkeit seitens des Compilers ist.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage