Ocaml 如何合理地将参数分配给方法

Ocaml 如何合理地将参数分配给方法,ocaml,reason,Ocaml,Reason,我有以下abstractFactory类: class virtual virtualProductA = { pub virtual methodA: string; }; class virtual virtualProductB = { pub virtual methodB: int; }; class virtual abstractFactory = { pub virtual createProductA : virtualProductA; pub virtu

我有以下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
方法有一个可选参数,可以是任何类型

大致如下:
pub virtual createProductA(参数?:any):virtualProductA

但是,上面的代码并没有正确编译

任何关于正确语法的建议都将不胜感激。多谢各位

免责声明:我正在使用OCaml。原因示例使用Try-Reason进行翻译

我不确定你的问题是否正确,但以下是我的想法

如果要为类的构造函数提供参数,请参见语法

奥卡姆 理由 在抽象工厂中,方法
createProductA
现在接受一个参数,并且是多态的

奥卡姆 理由 类型量词
'a.
表示“对于所有类型
'a
,…”。它用于告诉编译器“这不是一个类型参数,这只是一个多态方法”


再想一想,您可能希望将
virtualProductA
generic,下面是它的语法:

奥卡姆 理由
使用此可选参数,您试图实现什么目标?此外,抽象工厂之类的东西在OCaml中是非常单一的。你的最终目标是什么?更多的是为了学习。在学习了OCaml之后,我认为深入研究该语言的最佳方法是编写熟悉的代码,即OOP。然后将我学到的知识应用到函数式编程中。Param的目的是允许用户在方法中潜在地添加字符串、数字或对象。
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;
};
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;
};
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;
};