我有以下abstractFactory类:
class virtual virtualProductA = {
pub virtual methodA: string;
};
class virtual virtualProductB = {
pub virtual methodB: int;
};
class virtual abstractFactory = {
pub virtual createProductA : virtualProductA;
pub virtual createProductB : virtualProductB;
};
特别是,我想指定abstractFactory createProductA
方法有一个可选的param,可以是任何类型。
以下内容:
pub virtual createProductA (param?:any) : virtualProductA;
但是,上述内容编译不正确。
对于正确语法的任何建议都非常感激。谢谢。
答案 0 :(得分:3)
免责声明:我正在使用OCaml。 Reason原因示例使用Try Reason翻译。
我不确定我的问题是否正确,但这是我对此的看法。
如果您想为类virtualProductA
的构造函数提供参数,请在此处使用语法。
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
现在采用参数并且是多态的。
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
泛型,这里的语法是:
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;
};