MteEVAL — это библиотека для компиляции и оценки выражений во время выполнения. Выражения преобразуются в байт-код и затем выполняются по требованию с помощью простой виртуальной машины.
Существует четыре редакции библиотеки: Android (B4A), iOS (B4i), Java (B4J), JavaS2 (B4A/B4J).
JavaS2 — это наша версия библиотеки второго уровня производительности на языке Java.
См. Anywhere Software, чтобы узнать больше о кроссплатформенных инструментах разработки B4A, B4i и B4J.
Создание выражений во время выполнения — это мощный инструмент, позволяющий изменять вычисления и ход программы после установки, что в противном случае потребовало бы физического обновления или специальной сборки приложения. Например, любое приложение, предназначенное для управления планом компенсации продаж, может извлечь выгоду из выражений времени выполнения, где конечный пользователь может захотеть настроить формулы плана с учетом членов команды, ассортимента продуктов и целей продаж.
MteEVAL реализует один класс с именем Codeblock. Кодовый блок MteEVAL использует синтаксис почтенного компилятора xBase Clipper 5 1990-х годов, с которого началась конструкция. Кодовые блоки начинаются с открывающей скобки, за которой следует необязательный список параметров между каналами, затем выражение и заканчиваются закрывающей скобкой.
{| < parameters > | < expression > }Вам нужно скомпилировать Codeblock только один раз. После компиляции вы можете вычислять его столько раз, сколько необходимо, предоставляя при этом разные аргументы.
Пример 1: Кодовый блок без параметров
Dim cb as Codeblock
cb.Initialize
cb.Compile( "{||5 + 3}" )
Result = cb.Eval 'Result=8Пример 2: Кодовый блок с параметрами
Dim cb as Codeblock
cb.Initialize
cb.Compile( "{|length,width|length*width}" )
Area = cb.Eval2( Array( 3 , 17 ) ) 'Area=51При оценке кодового блока с параметрами используйте метод Eval2.
Пример 3: компиляция, оценка и повтор кодового блока
Dim cb as Codeblock
cb.Initialize
cb.Compile( "{|sales,r1,r2| r1*sales + iif( sales > 100000, (sales-100000)*r2, 0 ) }" )
Commission1 = cb.Eval2( Array( 152000 , . 08 , . 05 ) ) 'Commission1=14760
Commission2 = cb.Eval2( Array( 186100 , . 08 , . 07 ) ) 'Commission2=20915
Commission3 = cb.Eval2( Array( 320000 , . 08 , . 05 ) ) 'Commission3=36600 Библиотека поддерживает операторы стиля C/Java, а также постоянно растущий список собственных функций B4X.