如何将参数分配给 Reason 中的方法

How to assign a param to a method in Reason

我有以下抽象工厂class:

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 (param?:any) : virtualProductA;

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

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

Disclaimer: I'm using OCaml. The Reason examples are translated using Try Reason.

我不确定我是否答对了你的问题,但这是我对此的看法。

如果你想给你的 class 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.表示"for all types 'a, ..."。它用来告诉编译器"This is not a type parameter, this is merely a polymorphic method".


再三考虑,您可能希望使 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;
};