处理解释器的多参数操作码

时间:2014-01-29 23:13:42

标签: java oop design-patterns

我正在研究一个简单的口译员,以了解他们的工作方式。

我有几个方面我不确定。

我应该如何处理不同参数的操作码?

我可以有类似的东西:

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数组,但我想知道是否有更好的方法。

由于

1 个答案:

答案 0 :(得分:1)

使用varargs表示法。

定义您的方法:

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

现在您可以使用args作为一组int(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正确指出的那样:当有其他参数时,它必须是最后一个参数。