有人可以解释以下内容,这似乎有点不一致。
这行代码无效:
let l = [("Hi", 1); ("Ho", "One")]
因为元组是不同的 string*int vs string*string OK。
这行代码也是无效的:
let (m: (string*obj) list) = [("Hi", 1); ("Ho", "One")]
我明确告诉它这是一个 string*obj 元组列表,但它不会自动将 1 和 "One" 转换为 obj。也可以。
这行代码是有效的:
let (n: (string*obj) list) = [("Hi", unbox(1)); ("Ho", unbox("One"))]
在这种情况下,我明确地将 1 和“一”拆箱,它可以工作。
这就是我认为事情变得有点不一致的地方。采取以下措施:
type thing =
{
name: string
value: obj
}
let (p: thing list) = [{name="Hi"; value=1}; {name="Ho"; value="One"}]
该代码有效。值 1 和 "One" 都分配给作为 obj 的 'value'。
为什么我不需要为一个类型的成员拆箱,而是为一个元组中的一个项目拆箱?