Sml 如何在ML中获取新类型的元素?

Sml 如何在ML中获取新类型的元素?,sml,smlnj,ml,Sml,Smlnj,Ml,例如,如果我创建了一个新类型 类型map=int*string val a=1,a:int*字符串 然后我想从变量a中得到内部字符串a,我怎么能得到呢? 我试过a[1]、a[2]、a2,但它们不起作用…因为新类型只是一个两元组,所以您可以使用模式匹配,就像您对其他类型一样: - val a = (1, "a"); val a = (1,"a") : int * string - case a of (_, str) => str; val it = "a" : string - (fn

例如,如果我创建了一个新类型

类型map=int*string

val a=1,a:int*字符串

然后我想从变量a中得到内部字符串a,我怎么能得到呢?
我试过a[1]、a[2]、a2,但它们不起作用…

因为新类型只是一个两元组,所以您可以使用模式匹配,就像您对其他类型一样:

- 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;

由于新类型只是一个两元组,因此可以使用模式匹配,就像对其他类型一样:

- 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;
可以使用n运算符获取任何元组的第n个元素。在答复中:

- #1("one", "two");
val it = "one" : string
- #2("one", "two");
val it = "two" : string
可以使用n运算符获取任何元组的第n个元素。在答复中:

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

非常感谢你!但是类型未知的情况如何,例如val findElem=fn u,u,'a=>'a,第三个元素有一个未知类型,它将有一个错误'error:syntax error:deleting TYVAR RPAREN DARROW'如果我写val findElem=fn u,u,'a=>'astr只是一个变量,它没有特殊意义。使用您想要的任何变量名,ML将推断出它所能推断出的最多态的类型。非常感谢您!但是类型未知的情况如何,例如val findElem=fn u,u,'a=>'a,第三个元素有一个未知类型,它将有一个错误'error:syntax error:deleting TYVAR RPAREN DARROW'如果我写val findElem=fn u,u,'a=>'astr只是一个变量,它没有特殊意义。使用任何您想要的变量名,ML将推断出它所能推断出的最多态的类型。