2016-03-07 35 views
3

在試圖爲SML中的簡單語言創建解釋器時,我努力將字符串轉換爲整數。例如,在SML中將字符串轉換爲int

val someString = " 1.9" 
Int.fromString someString 

回報:

val it SOME 1 : int option 

而且,當我嘗試用從中提取的選項類型的值:

valOf(Int.fromString someString); 

返回:

val it = 1 : int

我很困惑,爲什麼它仍然將字符串轉換爲這個整數,即使它是一個實數。如何將字符串轉換爲int並處理錯誤(如果有的話)。

+0

此文檔可能會幫助您http://sml.sourceforge.net/Basis/option.html –

+0

'fromString'成功,如果字符串以整數開頭。你可能想編寫你自己的轉換器,檢查字符串中的每個字符是否是數字。 – molbdnilo

回答

6

我不知道每個實現中的轉換是如何工作的,但是在Poly/ML中,如果一個有效的int已經被讀取了,那麼一個有效的int將是returned - 即使整個字符串不是有效的int。

由於molbdnilo指出,這將是更容易使用Char.isDigit函數(或者你自己,讓更多的INT的情況下),以檢查串是一個int:

List.all Char.isDigit (String.explode someString) 

關於與你的困惑valOf,這是完全可以預料的,因爲你已經看到Int.fromString返回一個int選項。該valOf函數的定義是這樣的:因爲你看到

fun valOf (opt: 'a option) : 'a = 
    case opt of 
     NONE => raise Fail "option is NONE" 
     | SOME a => a 

這樣Int.fromString " 1.9"返回SOME 1,它必須的情況是valOf (Int.fromString " 1.9")回報1