gpt4 book ai didi

java - 使用多个脚本引擎

转载 作者:行者123 更新时间:2023-12-01 10:57:27 24 4
gpt4 key购买 nike

我有一个文件夹,其中可以包含任意数量的充当咒语的脚本。对于大多数脚本文件来说,这些脚本文件中的代码非常少。

一个简单的咒语可能包含:

  • 返回姓名
  • 返回伤害
  • 显示效果
  • 发射/控制射弹

更高级的可能会改变地形或类似的东西。

Java 端的 Spell 类调用脚本中的强制转换函数。

我想知道的是执行此操作的不同方法及其优缺点。我现在看到的方式是:在施放咒语时创建一个新的 ScriptEngine 对象,在完成后销毁它。

我认为不可能在现有的ScriptEngine上设置新的ScriptContext,因为在施放下一个法术之前该法术可能还没有完成施法,除非我实现了某种排队系统。

最佳答案

不必每次都创建一个新的脚本引擎,而是维护一个 ScriptEngine 实例,并且每次只创建一个新的上下文(带有新的全局变量)。然后在该上下文中评估您的脚本:

ScriptContext context = new SimpleScriptContext();
context.setBindings(engine.createBindings(), ScriptContext.ENGINE_SCOPE);

engine.eval(script, context);

如果您的脚本不处理全局范围(JavaScript 全局范围)中的可变状态,那么您可以简单地创建一个新上下文并使用引擎的相同全局变量:

ScriptContext engineContext = engine.getContext()

ScriptContext context = new SimpleScriptContext();
context.setBindings(
engineContext.getBindings(ScriptContext.ENGINE_SCOPE),
ScriptContext.ENGINE_SCOPE
);

engine.eval(myScript, myContext);

关于java - 使用多个脚本引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33557009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com