在动态模型编程中动作模型是最基本的可执行的元素,因此需要使用动作模型来实现其它编程语言中的if/else、while、do、try/catch、for等等语法,而这些动作则习惯上称为语法类的动作。
语法动作的实现需要通过变量上下文的状态,ActionContext的相关代码如下。
public class ActionContext implements Map<String, Object>{ /** 正常的运行状态 */ public static final int RUNNING = 0; /** 返回值的状态,返回到动作被初始调用的地方 */ public static final int RETURN = 1; /** 取消的状态,取消当前的动作执行 */ public static final int CANCEL = 2; /** 打断状态,一般返回到上一个循环处 */ public static final int BREAK = 3; /** 继续从循环处执行 */ public static final int CONTINUE = 4; /** 抛出异常的状态,一般到异常处理处结束 */ public static final int EXCEPTION = 5; /** * 设置动作的执行状态。 * * @param status 执行状态 */ public void setStatus(int status) { } /** * 返回动作执行的状态。 * * @return 动作的执行状态 */ public int getStatus() { } }
如Break的实现代码如下。
public static void run(ActionContext context){ context.setStatus(ActionContext.BREAK); }
While动作的流程控制代码如下。
while(IfCreator.checkCondition(self, actionContext)){ Thing childActions = self.getThing("ChildAction@0"); for (Thing child : childActions.getChilds()) { Action action = world.getAction(child); if (action != null) { result = action.run(actionContext, null, true); } int sint = actionContext.getStatus(); if (sint != ActionContext.RUNNING) { break; } } //判断循环的状态 if (actionContext.getStatus() == ActionContext.BREAK) { actionContext.setStatus(ActionContext.RUNNING); break; } else if (actionContext.getStatus() == ActionContext.CONTINUE) { actionContext.setStatus(ActionContext.RUNNING); continue; } else if (actionContext.getStatus() != ActionContext.RUNNING) { break; } }
Copyright © 2007-2014 XWorker.org 版权所有