我目前的項目涉及lexing和解析腳本代碼,因此我使用fslex和fsyacc。 Fslex LexBuffers可以進入LexBuffer<char>
和LexBuffer<byte>
品種,我想可以選擇使用兩者。F#內嵌函數專業化
爲了同時使用,我需要一個類型爲^ buf - > string的lexeme函數。到目前爲止,我嘗試在專業化看起來像:
let inline lexeme (lexbuf: ^buf) : ^buf -> string where ^buf : (member Lexeme: char array) =
new System.String(lexbuf.Lexeme)
let inline lexeme (lexbuf: ^buf) : ^buf -> string where ^buf : (member Lexeme: byte array) =
System.Text.Encoding.UTF8.GetString(lexbuf.Lexeme)
我得到一個類型錯誤,指出函數體應該是^buf -> string
型的,但推斷類型就是string
。顯然,我正在做一些事情(主要是?)錯誤。
我試圖甚至可能在F#中嗎?如果是這樣,有人能指向我的正確道路嗎?
謝謝!
謝謝,托馬斯。我確信必須有一個原因,爲什麼F#函數不能被重載 - 不管它是什麼,我都無法理解。靜態類就足夠了! – Ben 2010-12-21 22:42:02