Разрешение токенов в Beanshell - PullRequest
0 голосов
/ 07 марта 2011

Я хочу использовать beanshell (bsh) для оценки пользовательских выражений.Я хочу разрешить этим выражениям иметь своего рода подстановку макросов, например:

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

Есть ли способ заставить bsh перезвонить в java для подстановки переменных при разбореприведенный выше пример перед оценкой?

РЕДАКТИРОВАТЬ Мое намерение состоит в том, чтобы позволить пользователю указать выражение (например, @something == 5), где @something является ключом и требует замены на фактическое значение.Я хочу иметь возможность передавать всю строку оценки, как указано пользователем, и хотел бы, чтобы beanshell перезванивал обработчику типа 'resolver' во время разбора.

Заранее спасибо - Фрэнк

Ответы [ 2 ]

0 голосов
/ 28 апреля 2016

Действительно старый вопрос, но вот мой ответ:

  1. Установите ваш преобразователь как переменную на интерпретаторе

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

  1. Жетоны процесса

Предварительно обработайте пользовательский ввод для шаблона @something в регулярное выражение или что-то еще, чтобы преобразовать ваш токен скрипта как:

resolver.resolve("@something") == 5
  1. Выполнить скрипт (для ясности я пропустил \ ", так как это будет переменная)

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

Метод разрешения может вернуть объект; Лёгкая печать и авто-бокс Beanshell должны заботиться о вещах. Я вижу проблему, например, в String.equals (), поскольку для этого требуется нечто большее, чем просто замена токена.

0 голосов
/ 08 апреля 2011

Нет, в бобовой оболочке нет способа достичь этого.Вы можете опубликовать запрос функции для этого на http://code.google.com/p/beanshell2

Но, возможно, вы дадите немного больше информации о том, что вы пытаетесь достичь ..?

...