Germany | Finland | Saint Petersburg | Drive

IIF - Immediate IF (qpile и lua)

Опубликовано в M4

Тернарный оператор - постоянно используемое мной очень простое расширение языка QPILE.

Чтобы каждый раз не выписывать конструкции типа 

if size > 0
    oper = "Buy"
else
    oper = "Sell"
end if

и ей подобные, написал элементарный макрос, который делает такие вещи за меня.

 

QPILE

Предыдущий фрагмент с использованием этого макроса теперь выглядит так:

IIf(size > 0,oper,"Buy","Sell")

 

 Сам макрос на языке препроцессора M4 задаётся так:

define(`IIf',`ifelse(m4_is_variable($2),False,m4_error(Second parameter in IIF must be variable name),$#,4,`if $1
$2 = $3
else
$2 = $4
end if',`m4_error(IIF syntax: IIF(`condition',`variable',`truevalue',`falsevalue'))')')

Таким образом, макрос проверяет, чтобы второй параметр, переданный ему был переменной (а не выражением или чем-нибудь еще. Это делает макрос m4_is_variable). Если число параметров не равно 4, также выдаётся диагностика с допустимым синтаксисом (это делает макрос m4_error).

 

define(`m4_is_variable',`ifelse(regexp($1,`[^a-zA-Z0-9_]'),-1,True,False)')

 

LUA

Тут совсем просто.

 

define(`iif',`((`$1') and (`$2') or (`$3'))')

 

Добавить комментарий


Библиотека