为什么“在编译时无法读取参数”

时间:2019-05-26 17:15:16

标签: d

我正在尝试在以下代码中使用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."]

1 个答案:

答案 0 :(得分:1)

如果我理解得很好,您要尝试实现的是某种形式的表达式求值(涉及解析表达式语法)。例如,BASH的eval()可以将任意表达式作为字符串,并返回一个值(如果表达式有效)。

据我所知,

D标准库没有这种功能。

对于一个简单的解决方案,我将使用PeggedReference)。 DLang Tour's Pegged page是一个很好的起点,因此我建议您从那里开始。