我正在尝试在以下代码中使用tmp->data = malloc(strlen(value) + 1);
strcpy(tmp->data, value);
:
mixin
但是我遇到以下错误:
import std.stdio;
import std.file;
void main(string[] args){
if (args.length != 2) {
writeln("usage: ./app < number expression >");
return;
}
else {
// following statements work ok:
writeln(args);
writeln(args.length);
writeln(args[1]);
// following 2 statements do not work; same error:
//mixin("writeln("~args[1]~");"); // Error: variable args cannot be read at compile time
writeln(mixin(args[1])); // Error: variable args cannot be read at compile time
}
}
问题出在哪里,如何解决?
编辑:我想用参数“ 2 + 2”调用该程序,并希望该程序对其进行计算。
以下操作也不起作用:
$ rdmd soq_mycalc.d
soq_mycalc.d(17): Error: variable args cannot be read at compile time
Failed: ["/usr/bin/dmd", "-v", "-o-", "soq_mycalc.d", "-I."]
答案 0 :(得分:1)
如果我理解得很好,您要尝试实现的是某种形式的表达式求值(涉及解析表达式语法)。例如,BASH的eval()
可以将任意表达式作为字符串,并返回一个值(如果表达式有效)。
D标准库没有这种功能。
对于一个简单的解决方案,我将使用Pegged(Reference)。 DLang Tour's Pegged page是一个很好的起点,因此我建议您从那里开始。