2014-11-16 35 views
1

例如,如果我創建一個新的類型如何獲取ML中的新元素?

type map = int * string;

val a = (1,"a") : int * string;

,然後我想從變量內「一」的字符串,我怎樣才能得到呢? 我試過[1],[2],(2),它們不起作用...

回答

2

由於新類型只是一個二元組,因此您可以使用模式匹配就像爲其他類型:

- val a = (1, "a"); 
val a = (1,"a") : int * string 

- case a of (_, str) => str; 
val it = "a" : string 

- (fn (_, str) => str) a; 
val it = "a" : string 

如果這成爲一種常見的操作,你可以考慮使用一個實用功能:

fun unpackStr (_, str) = str; 
+0

非常感謝你!但類型未知的情況如何,例如val findElem =(fn(_,_,'a)=>'a); ,第三個元素有一個未知類型,如果我寫入「val findElem =(fn(_,_,'a)=>'a)」,則會出現錯誤'錯誤:語法錯誤:刪除TYVAR RPAREN DARROW' – FionaMango

+0

'str'只是一個變量,沒有特別的意義。使用你想要的任何變量名稱,ML將推斷它可以的最多態的類型。 –

+0

謝謝你,我明白了。 – FionaMango

3

可以使用#n運營商獲得的n個元素任何元組。在REPL中:

- #1("one", "two"); 
val it = "one" : string 
- #2("one", "two"); 
val it = "two" : string 
相關問題