Я пытаюсь построить небольшую DSL в Lua с условными обозначениями.Условные обозначения для Lua DSL?
x = '0'
function start()
return function() end
end
function set_x (v)
x = v
return function() end
end
function if_x (v)
if x == v then
print ("x = ", v)
else
print ("x != ", v)
end
return function() end
end
-- DSL here
start {
set_x '10',
if_x '10' { print ('x is 10') },
if_x '20' { print ('x is 20') }
}
Выход:
x = 10
x is 10
x != 20
x is 20
Как реализовать условными элегантным способом, так что x is 20
не печатается? Я не смог сделать это, не установив глобальную переменную в set_x
и проверив ее в пределах if_x
, но это выглядит уродливо.
Любой ключ?
Спасибо!
И, о, BTW, то, что у вас есть, обычно называется ** E ** DSL (встроенный DSL), поскольку использует существующие языковые конструкции. –