基于布尔参数的开关类型(不继承)?
Switch type based on boolean parameter (without inheriting)?
我有一个代表某些化学过程的模型,我希望反应模型可以根据布尔参数在吸收和解吸之间切换 class(定义各自的模型)。
我试着这样做:
model Sorption
boolean parameter absorbing;
AbsorptionModel if absorbing else Desorptionmodel reaction;
equation
reaction.T = T; //dummy usage
...
像这样使用它:
Sorption TestAbsorption(absorbing=true); // uses the absorption model
Sorption TestDesorption(absorbing=false); // uses the desorption model
当然,这种方式不行。 absorbing
在编译时已知,所以我觉得以某种方式实现它应该没问题。
我尝试使用 replaceable
,但我不想(不必要地)制作 Sorption
的两个单独的子 class 只是为了切换反应模型的类型。似乎 replaceable/redeclare 只有在继承时才可用,但我可能错了?有没有办法做我想做的事?
AbsorptionModel
和 DesorptionModel
都继承自相同的基础 class,并且具有相同的接口,如果相关的话。
不需要 if 并且不能将 if 与组件声明一起使用,条件组件除外(但这只会删除组件声明及其连接方程)。
model Sorption
boolean parameter absorbing;
replaceable model RModel = AbsorptionModel;
RModel reaction;
equation
reaction.T = T; //dummy usage
...
像这样使用它:
Sorption TestAbsorption(redeclare model RModel = AbsorptionModel); // uses the absorption model
Sorption TestDesorption(redeclare model RModel = Desorptionmodel); // uses the desorption model
我有一个代表某些化学过程的模型,我希望反应模型可以根据布尔参数在吸收和解吸之间切换 class(定义各自的模型)。 我试着这样做:
model Sorption
boolean parameter absorbing;
AbsorptionModel if absorbing else Desorptionmodel reaction;
equation
reaction.T = T; //dummy usage
...
像这样使用它:
Sorption TestAbsorption(absorbing=true); // uses the absorption model
Sorption TestDesorption(absorbing=false); // uses the desorption model
当然,这种方式不行。 absorbing
在编译时已知,所以我觉得以某种方式实现它应该没问题。
我尝试使用 replaceable
,但我不想(不必要地)制作 Sorption
的两个单独的子 class 只是为了切换反应模型的类型。似乎 replaceable/redeclare 只有在继承时才可用,但我可能错了?有没有办法做我想做的事?
AbsorptionModel
和 DesorptionModel
都继承自相同的基础 class,并且具有相同的接口,如果相关的话。
不需要 if 并且不能将 if 与组件声明一起使用,条件组件除外(但这只会删除组件声明及其连接方程)。
model Sorption
boolean parameter absorbing;
replaceable model RModel = AbsorptionModel;
RModel reaction;
equation
reaction.T = T; //dummy usage
...
像这样使用它:
Sorption TestAbsorption(redeclare model RModel = AbsorptionModel); // uses the absorption model
Sorption TestDesorption(redeclare model RModel = Desorptionmodel); // uses the desorption model