표현식 언어
표현식 언어
섹션 제목: “표현식 언어”expr-lang 구문을 사용하여 동적 표현식을 평가합니다. 전체 Lua 실행 없이 필터링, 검증, 규칙 평가를 위한 안전한 표현식을 컴파일하고 실행합니다.
표현식 캐시는 부팅 시 설정됩니다:
lua: expr: cache_enabled: true # 표현식 캐싱 활성화 capacity: 5000 # 캐시 용량local expr = require("expr")표현식 평가
섹션 제목: “표현식 평가”표현식 문자열을 평가하고 결과를 반환합니다. 컴파일된 표현식에 대해 내부 LRU 캐시를 사용합니다:
-- 단순 수학local result = expr.eval("1 + 2 * 3") -- 7
-- 변수 사용local total = expr.eval("price * quantity", { price = 29.99, quantity = 3}) -- 89.97
-- 불리언 표현식local is_adult = expr.eval("age >= 18", {age = 21}) -- true
-- 문자열 연산local greeting = expr.eval('name + " is " + status', { name = "Alice", status = "online"}) -- "Alice is online"
-- 삼항 연산자local label = expr.eval('score > 90 ? "A" : score > 80 ? "B" : "C"', { score = 85}) -- "B"
-- 배열 연산local has_admin = expr.eval('"admin" in roles', { roles = {"user", "admin", "viewer"}}) -- true| 파라미터 | 타입 | 설명 |
|---|---|---|
expression | string | expr-lang 구문 표현식 |
env | table | 표현식을 위한 변수 환경 (선택적) |
반환: any, error
표현식 컴파일
섹션 제목: “표현식 컴파일”반복 평가를 위해 표현식을 재사용 가능한 Program 객체로 컴파일합니다:
-- 반복 사용을 위해 한 번 컴파일local discount_calc, err = expr.compile("price * (1 - discount_rate)")if err then return nil, errend
-- 다른 입력으로 재사용local price1 = discount_calc:run({price = 100, discount_rate = 0.1}) -- 90local price2 = discount_calc:run({price = 50, discount_rate = 0.2}) -- 40local price3 = discount_calc:run({price = 200, discount_rate = 0.15}) -- 170| 파라미터 | 타입 | 설명 |
|---|---|---|
expression | string | expr-lang 구문 표현식 |
env | table | 컴파일을 위한 타입 힌트 환경 (선택적) |
반환: Program, error
컴파일된 프로그램 실행
섹션 제목: “컴파일된 프로그램 실행”제공된 환경으로 컴파일된 표현식을 실행합니다:
-- 검증 규칙local validator, _ = expr.compile("len(password) >= 8 and len(password) <= 128")
local valid1 = validator:run({password = "short"}) -- falselocal valid2 = validator:run({password = "securepass123"}) -- true
-- 가격 규칙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| 파라미터 | 타입 | 설명 |
|---|---|---|
env | table | 표현식을 위한 변수 환경 (선택적) |
반환: any, error
내장 함수
섹션 제목: “내장 함수”Expr-lang은 많은 내장 함수를 제공합니다:
-- 수학 함수expr.eval("max(1, 5, 3)") -- 5expr.eval("min(10, 2, 8)") -- 2expr.eval("abs(-42)") -- 42expr.eval("ceil(3.2)") -- 4expr.eval("floor(3.8)") -- 3
-- 문자열 함수expr.eval('len("hello")') -- 5expr.eval('upper("hello")') -- "HELLO"expr.eval('lower("HELLO")') -- "hello"expr.eval('trim(" hi ")') -- "hi"expr.eval('contains("hello", "ell")') -- true
-- 배열 함수expr.eval("len(items)", {items = {1,2,3}}) -- 3expr.eval("sum(values)", {values = {1,2,3,4}}) -- 10| 조건 | 종류 | 재시도 가능 |
|---|---|---|
| 표현식이 비어있음 | errors.INVALID | 아니오 |
| 표현식 구문 잘못됨 | errors.INTERNAL | 아니오 |
| 표현식 평가 실패 | errors.INTERNAL | 아니오 |
| 결과 변환 실패 | errors.INTERNAL | 아니오 |
에러 처리는 에러 처리를 참조하세요.