1

我有以下 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;
};

特别是,我想指定 abstractFactorycreateProductA方法有一个可选参数,它可以是任何类型。

类似于以下内容: pub virtual createProductA (param?:any) : virtualProductA;

但是,上面的编译不正确。

任何关于正确语法的建议都非常感谢。谢谢你。

4

1 回答 1

3

免责声明:我正在使用 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;
};
于 2017-09-20T14:09:31.093 回答