背景:我正在为一种简单的语言编写解释器,供用户玩耍和玩乐。它将作为游戏的模组运行。我不能使用动态的原因是因为游戏在 Unity3d 中运行,它运行相当于 .net 3.5 的 Mono 版本(没有动态)。
现在的问题是:我将值存储为对象。在评估表达式(比如添加)时,我遇到了尝试做“对象+对象”的问题。我怎样才能做到这一点?
一种解决方案是在每个对象上做一个巨大的 switchblock,检查它的类型以查看它是否是基本值类型(int、long、double 等),如果是,则转换为该类型并添加。如果不是基本值类型,则在每种类型中查找 op_Addition 方法,如果存在,则调用它。
这可能会很快为每个操作员执行大量代码。我想知道是否有更好的,更少复制粘贴的方式。(最佳解决方案是一些 .net 库函数object Add(object, object)
,但这是有希望的)