0

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

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

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

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

提前致谢——弗兰克

4

2 回答 2

0

不,没有办法在 beanshell 中实现这一点。您可以在http://code.google.com/p/beanshell2上为此发布功能请求

但也许你对你试图达到的目标提供更多的见解......?

于 2011-04-08T08:27:21.553 回答
0

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

  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() 之类的东西,因为这需要的不仅仅是令牌替换。

于 2016-04-28T14:54:55.630 回答