gpt4 book ai didi

java - 从 Java/Scala 实例化 Rhinoscript native 对象

转载 作者:行者123 更新时间:2023-11-30 04:55:55 24 4
gpt4 key购买 nike

我正在尝试提高 javascript 代码段评估器的性能。这些脚本片段可以引用类似 json 对象图的字符串键控映射中存在的任意数量的变量(IE:Json AST)。我使用的是 JDK 1.6 和嵌入式 Rhinoscript 引擎 (v1.6R2)。

目前,处理采用以下形式:

  1. 解析代码片段以发现引用变量的名称
  2. 从映射中检索变量并将其序列化为 json 字符串
  3. Json 字符串在脚本开头分配给一个类似名称的变量
  4. 评估增强脚本

我试图弄清楚如何跳过 json 序列化阶段并创建直接的 Rhinoscript native 对象以放置在脚本的“绑定(bind)”中。所需的步骤将是:

  1. 解析代码片段以发现引用变量的名称
  2. 从 map 中检索变量并转换为本地 Rhinoscript 等效项
  3. 原生对象放置在绑定(bind)中
  4. 使用所述绑定(bind)评估原始脚本

你知道在哪里可以找到有关如何实例化 native rhinoscript 对象的文档或示例吗?

如果您想进行修补,我的 scala 学习项目可能会有一些用处。我想出的任何答案也应该出现在那里......

http://subversion.assembla.com/svn/freshcode_public/learn_scala/datastore/src/test/scala/pkg/script

提前致谢。

最佳答案

经过多次摆弄,我想出了一个足够的解决方案,尽管它没有带来我所希望的性能提升(仅快了 10%)。

该解决方案特定于 Scala/Lift/Json,包含在 ScriptingUtil.scala 中文件。

总结一下:

  1. Context.javaToJs() 似乎并非在所有情况下都有效。 (java.lang.RuntimeException:没有与当前线程关联的上下文)
  2. 需要Scriptable类型的“范围”对象。我想出的解决方案并不漂亮,但它有效。
  3. 创建 NativeArray:

    val na = new NativeArray(arr)
    na.setPrototype(ScriptableObject.getClassPrototype(scope, "Array"))

关于java - 从 Java/Scala 实例化 Rhinoscript native 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8558405/

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