OOP - 如何在 Reason 中创建一种类型的实例调用另一种类型
OOP - How to create an instance of one type called to another type in Reason
我有两个抽象产品类型:
type abstractProductA = {.
methodA: string
};
type abstractProductB = {.
methodB: int
};
用于创建以下产品 classes:
class productA1 = {
pub methodA => "This is methodA of ProductA1";
};
class productB1 = {
pub methodB => 1;
};
我想在我的抽象工厂中调用 abstractProductA 和 abstractProductB 的实例。类似于以下内容(我知道语法已关闭):
type abstractFactory = {.
createProductA: abstractProductA,
createProductB: abstractProductB
};
所以当我使用以下 class:
创建新的 concreteFactory 时
class concreteFactory1 = {
pub createProductA => (new productA1);
pub createProductB => (new productA1);
};
和构造函数:
let g = new concreteFactory1#createProductB;
Js.log (g#methodA);
编译器应该抱怨 createProductB 只接受一个整数,而不是一个字符串(目前它不接受)。
谢谢,欢迎提出任何建议。
似乎错误应该发生在createProductB
returns productA1
而不是productB1
。为了实现这一点,您需要为 abstractFactory
定义一个虚拟 class 而不仅仅是一个对象类型,然后让 concreteFactory
显式继承它。
class virtual abstractFactory = {
pub virtual createProductA: abstractProductA;
pub virtual createProductB: abstractProductB;
};
class concreteFactory1 = {
inherit abstractFactory;
pub createProductA => (new productB1);
pub createProductB => (new productB1);
};
这将在 pub createProductA => (new productB1)
上产生以下错误:
This expression has type productB1 but an expression was expected of type abstractProductA The second object type has no method methodB
我有两个抽象产品类型:
type abstractProductA = {.
methodA: string
};
type abstractProductB = {.
methodB: int
};
用于创建以下产品 classes:
class productA1 = {
pub methodA => "This is methodA of ProductA1";
};
class productB1 = {
pub methodB => 1;
};
我想在我的抽象工厂中调用 abstractProductA 和 abstractProductB 的实例。类似于以下内容(我知道语法已关闭):
type abstractFactory = {.
createProductA: abstractProductA,
createProductB: abstractProductB
};
所以当我使用以下 class:
创建新的 concreteFactory 时class concreteFactory1 = {
pub createProductA => (new productA1);
pub createProductB => (new productA1);
};
和构造函数:
let g = new concreteFactory1#createProductB;
Js.log (g#methodA);
编译器应该抱怨 createProductB 只接受一个整数,而不是一个字符串(目前它不接受)。
谢谢,欢迎提出任何建议。
似乎错误应该发生在createProductB
returns productA1
而不是productB1
。为了实现这一点,您需要为 abstractFactory
定义一个虚拟 class 而不仅仅是一个对象类型,然后让 concreteFactory
显式继承它。
class virtual abstractFactory = {
pub virtual createProductA: abstractProductA;
pub virtual createProductB: abstractProductB;
};
class concreteFactory1 = {
inherit abstractFactory;
pub createProductA => (new productB1);
pub createProductB => (new productB1);
};
这将在 pub createProductA => (new productB1)
上产生以下错误:
This expression has type productB1 but an expression was expected of type abstractProductA The second object type has no method methodB