OCaml定义带参数类提示类型变量未绑定错误是什么原因
错误原因
- OCaml的强类型系统要求类的所有关联类型必须是明确绑定的,你的构造参数
num_apples和num_bananas没有指定类型,编译器无法推断出固定类型,就会抛出Some type variables are unbound in this type的错误。 - 你写的
method get_a= num_apples直接引用了构造阶段的临时参数,而不是实例存储的apples字段,虽然这不是报错的直接原因,但会导致后续修改apples字段后,方法返回值不会同步更新,不符合类封装的设计逻辑。
修正代码
如果你只需要存储整数类型的水果数量,直接给构造参数加类型标注即可:
class basket (num_apples : int) (num_bananas : int) = object val mutable apples = num_apples val mutable bananas = num_bananas method get_a = apples end ;;
如果你需要类支持泛型,可以存储任意类型的数值,给类加上类型参数声明即可:
class ['a] basket (num_apples : 'a) (num_bananas : 'a) = object val mutable apples = num_apples val mutable bananas = num_bananas method get_a = apples end ;;
内容的提问来源于stack exchange,提问作者tacocat
相关产品推荐
相关产品推荐

