# Expression _Path: en/lua/dynamic/expression_ ## Table of Contents - Expression Language ## Content # Expression Language Evaluate dynamic expressions using [expr-lang](https://expr-lang.org/) syntax. Compile and execute safe expressions for filtering, validation, and rule evaluation without full Lua execution. ## Configuration Expression cache is configured at boot: ```yaml lua: expr: cache_enabled: true # Enable expression caching capacity: 5000 # Cache capacity ``` ## Loading ```lua local expr = require("expr") ``` ## Evaluating Expressions Evaluate an expression string and return the result. Uses internal LRU cache for compiled expressions: ```lua -- Simple math local result = expr.eval("1 + 2 * 3") -- 7 -- With variables local total = expr.eval("price * quantity", { price = 29.99, quantity = 3 }) -- 89.97 -- Boolean expressions local is_adult = expr.eval("age >= 18", {age = 21}) -- true -- String operations local greeting = expr.eval('name + " is " + status', { name = "Alice", status = "online" }) -- "Alice is online" -- Ternary operator local label = expr.eval('score > 90 ? "A" : score > 80 ? "B" : "C"', { score = 85 }) -- "B" -- Array operations local has_admin = expr.eval('"admin" in roles', { roles = {"user", "admin", "viewer"} }) -- true ``` | Parameter | Type | Description | |-----------|------|-------------| | `expression` | string | expr-lang syntax expression | | `env` | table | Variable environment for expression (optional) | **Returns:** `any, error` ## Compiling Expressions Compile an expression into a reusable Program object for repeated evaluation: ```lua -- Compile once for repeated use local discount_calc, err = expr.compile("price * (1 - discount_rate)") if err then return nil, err end -- Reuse with different inputs local price1 = discount_calc:run({price = 100, discount_rate = 0.1}) -- 90 local price2 = discount_calc:run({price = 50, discount_rate = 0.2}) -- 40 local price3 = discount_calc:run({price = 200, discount_rate = 0.15}) -- 170 ``` | Parameter | Type | Description | |-----------|------|-------------| | `expression` | string | expr-lang syntax expression | | `env` | table | Type hint environment for compilation (optional) | **Returns:** `Program, error` ## Running Compiled Programs Execute a compiled expression with provided environment: ```lua -- Validation rule local validator, _ = expr.compile("len(password) >= 8 and len(password) <= 128") local valid1 = validator:run({password = "short"}) -- false local valid2 = validator:run({password = "securepass123"}) -- true -- Pricing rule local pricer, _ = expr.compile([[ base_price * quantity * (1 - bulk_discount) + shipping ]]) local order_total = pricer:run({ base_price = 25.00, quantity = 10, bulk_discount = 0.15, shipping = 12.50 }) -- 225.00 ``` | Parameter | Type | Description | |-----------|------|-------------| | `env` | table | Variable environment for expression (optional) | **Returns:** `any, error` ## Built-in Functions Expr-lang provides many built-in functions: ```lua -- Math functions expr.eval("max(1, 5, 3)") -- 5 expr.eval("min(10, 2, 8)") -- 2 expr.eval("abs(-42)") -- 42 expr.eval("ceil(3.2)") -- 4 expr.eval("floor(3.8)") -- 3 -- String functions expr.eval('len("hello")') -- 5 expr.eval('upper("hello")') -- "HELLO" expr.eval('lower("HELLO")') -- "hello" expr.eval('trim(" hi ")') -- "hi" expr.eval('contains("hello", "ell")') -- true -- Array functions expr.eval("len(items)", {items = {1,2,3}}) -- 3 expr.eval("sum(values)", {values = {1,2,3,4}}) -- 10 ``` ## Errors | Condition | Kind | Retryable | |-----------|------|-----------| | Expression is empty | `errors.INVALID` | no | | Expression syntax invalid | `errors.INTERNAL` | no | | Expression evaluation fails | `errors.INTERNAL` | no | | Result conversion fails | `errors.INTERNAL` | no | See [Error Handling](lua/core/errors.md) for working with errors. ## Navigation Previous: Exec (lua/dynamic/exec) Next: Overview (wasm/overview)