다음 F # 코드에서; 나는 printfn
세 번 호출 될 것으로 예상합니다 . 각각 문자열이 있습니다. 그러나 결론은 컴파일되지 않습니다 ( The type 'string' is not compatible with the type 'Printf.TextWriterFormat<'a>'
).
이것이 작동 할 수 있다는 것을 의미하는 처음 두 줄은 무엇입니까? 그들은 단지 문자열이 아닙니까?
open System
printfn ("\r\n") // Works
printfn ("DANNY") // Works
printfn (DateTime.Now.ToLongTimeString()) // Doesn't compile
F # 컴파일러는 전달하는 형식 문자열을 정적으로 분석하여 전달 printfn
하는 인수가 사용하는 형식 지정자에 유효한지 확인합니다. 예를 들어 다음은 컴파일되지 않습니다.
printfn "%d" "some value"
string
% d 형식 지정자와 호환되지 않기 때문 입니다. 컴파일러는 유효한 형식 문자열을 TextWriterFormat<T>
.
임의의 문자열로는이를 수행 할 수 없으며 변환을 수행하지 않기 때문에 위의 유형 오류가 발생합니다.
그러나을 사용하여 직접 변환 할 수 있습니다 Printf.TextWriterFormat
. 예를 들어 a 및를 필요로하는 형식 문자열의 string
경우 int
다음을 사용할 수 있습니다.
let f = Printf.TextWriterFormat<string -> int -> unit>("The length of '%s' is: %d")
printfn f "something" 9
문자열에 형식 자리 표시자가 없으므로 다음을 수행 할 수 있습니다.
let f = Printf.TextWriterFormat<unit>(DateTime.Now.ToLongTimeString())
printfn f
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다