我正在使用一个简单的解释器来了解有关它们如何工作的更多信息。

我有几个不确定的方面。

我应该如何处理各种参数的操作码?

我可能会喜欢:

void execute(int opcode, int arg1, int arg2, int arg3, Machine m);


但是,这:

-Limits me to 3 args
-Forces me to supply dummy args for opcodes taking less args


口译员通常采用什么方式处理此问题?

我当然可以推送一个int数组,但是我想知道是否有更好的方法。

谢谢

最佳答案

使用varargs表示法。

这样定义您的方法:

void execute(int opcode, Machine m, int... args);


现在您可以像整数数组(args)一样使用int[]

这意味着所有这些符号都将起作用:

execute(opcode, m, arg1);
execute(opcode, m, arg1, arg2);
execute(opcode, m, arg1, arg2, arg3);
execute(opcode, m, arg1, arg2, arg3, arg4);


重要说明:如果您有两个相同类型的参数,并且其中一个是varargs,则必须将这些varargs放在单数之后以防止歧义。

正如Elliot正确指出的那样:当还有其他参数时,它也必须是最后一个参数。

关于java - 处理解释器的多参数操作码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21444717/

10-11 19:29
查看更多