免责声明:我正在使用 OCaml。Reason 示例是使用 Try Reason 翻译的。
我不确定我的问题是否正确,但这是我对此的看法。
如果你想给你的类的构造函数一个参数virtualProductA
,这里的语法。
OCaml
class virtual virtualProductA my_object = object
val value : 'a = my_object
method virtual methodA : string
end
原因
class virtual virtualProductA my_object => {
as _;
val value: 'a = my_object;
pub virtual methodA: string;
};
在您的抽象工厂中,该方法createProductA
现在接受一个参数并且是多态的。
OCaml
class virtual abstractFactory = object
method virtual createProductA : 'a. 'a -> virtualProductA
method virtual createProductB : virtualProductB
end
原因
class virtual abstractFactory = {
as _;
pub virtual createProductA: 'a. 'a => virtualProductA;
pub virtual createProductB: virtualProductB;
};
类型量词的'a.
意思是“对于所有类型'a
,...”。它用于告诉编译器“这不是类型参数,这只是一个多态方法”。
再想一想,您可能想要virtualProductA
通用,这是它的语法:
OCaml
class virtual ['a] virtualProductA my_object = object
val value : 'a = my_object
method value = value (* type 'a is inferred here, no need to over-annotate *)
method virtual methodA : string
end
原因
class virtual virtualProductA 'a my_object => {
as _;
val value: 'a = my_object;
pub value = value; /* type 'a is inferred here, no need to over-annotate */
pub virtual methodA: string;
};