【问题标题】:Resolving tokens in Beanshell在 Beanshell 中解析令牌
【发布时间】:2016-04-28 22:54:55
【问题描述】:

我想使用 beanshell (bsh) 来评估用户定义的表达式。我想让这些表达式有一种宏替换,例如:

boolean isTrue = i.eval("@something == 5");

在评估之前解析上述示例时,有没有办法让 bsh 回调我的 java 以替换变量?

编辑 我的意图是允许用户指定表达式(例如@something == 5),其中@something 是一个键,需要替换为实际值。我希望能够按照用户的说明传递整个评估字符串,并希望 beanshell 在解析期间回调“解析器”类型的处理程序。

提前致谢 -- 弗兰克

【问题讨论】:

  • 或任何支持此功能的东西(Rhino 等)

标签: java beanshell


【解决方案1】:

不,没有办法在 beanshell 中实现这一点。 您可以在http://code.google.com/p/beanshell2

上发布对此的功能请求

但也许您对您尝试实现的目标提供更多见解......?

【讨论】:

  • 并非如此。你为什么不考虑现有的可能性? IE。 '解释器 i = new Interpreter(); i.set(某事, 5); i.eval("something == 5");'
【解决方案2】:

一个很老的问题,但这是我的答案:

  1. 将解析器设置为解释器上的变量

Interpreter i = new Interpreter(); i.set("resolver", myResolver);

  1. 处理令牌

将模式 @something 的用户输入预处理为正则表达式或其他任何内容,以便将您的脚本标记呈现为:

resolver.resolve("@something") == 5
  1. 执行脚本(为了清楚起见,我省略了 \",因为这将是一个变量)

i.eval("resolver.resolve("@something") == 5")

resolve方法可以返回一个对象; Beanshell 松散类型和自动装箱应该可以解决问题。例如,我看到的问题是 String.equals() 之类的东西,因为这需要的不仅仅是令牌替换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-26
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多