gpt4 book ai didi

generics - 为什么是 'Code is not sufficiently generic' ?

转载 作者:行者123 更新时间:2023-12-04 01:10:56 27 4
gpt4 key购买 nike

谁能解释为什么下面的第二个例子不能编译?

“测试 2”给出“错误 FS0670:此代码不够通用。类型变量 ^a 无法泛化,因为它会超出其范围。”。我无法理解此错误消息。

// Test 1
type test1<'a> = | A of 'a
with
override t.ToString() =
match t with
| A a -> a.ToString()

// Test 2
type test2<'a> = | A of 'a
with
override t.ToString() =
match t with
| A a -> string a

// Test 3
type test3<'a> = | A of 'a
with
override t.ToString() =
match t with
| A a -> string (a :> obj)

最佳答案

这是另一个再现:

let inline f< ^T>(x:^T) = box x

type test4<'a> = | A of 'a
with
member t.M() =
match t with
| A a -> f a
string是使用静态类型约束的内联函数,此类函数的错误诊断有时很差。我不太了解诊断消息本身,但重点是,在调用站点,我们不知道通用类型 'a ,这意味着我们不能将调用的正确版本内联到 string (或 f 在我的再现中)。在例如你上调到 obj 的情况,我们知道我们要内联 obj string 的版本,所以没关系。

关于generics - 为什么是 'Code is not sufficiently generic' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3211263/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com