Обычный способ гарантировать, что аргументы оцениваются, даже для функций, которые в противном случае заключают в кавычки свои аргументы, - это apply
функция для аргументов. Например:
apply (declare, [var, 'constant]);
Или в функции:
foo(var) := apply (declare, [var, 'constant]);
apply
оценивает свои аргументы, поэтому аргументы оцениваются по времени, когда функция их видит.
Цитата ''var
не имеет ожидаемого эффекта в функции, потому что цитата применяется только во время синтаксического анализа выражения. Поэтому любое последующее присвоение var
не имеет никакого эффекта.
Я рекомендую против eval_string
. Почти всегда есть лучший способ сделать что-либо, чем обработка строк; в этом случае лучший способ - apply
.