我正在使用一个简单的解释器来了解有关它们如何工作的更多信息。
我有几个不确定的方面。
我应该如何处理各种参数的操作码?
我可能会喜欢:
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/