3

我正在使用一种称为 JS 的嵌入式语言进行编码。

我希望能够以任何顺序调用三个函数。(ABC、ACB、BAC、BCA、CBA、CAB。)

诀窍?该语言没有用户定义的函数。

它确实有条件和循环结构。

我想我有三个选择。

  1. 复制一大堆代码。
  2. 编写一个预处理器(这将创建所有重复的代码)。
  3. 执行一个包含三个迭代的循环,使用一个数组来控制每次循环调用哪个功能。

我讨厌#1。重复的代码很讨厌。如何在不搞砸的情况下改变任何东西?

我猜#2没问题。至少我在源代码中没有重复的代码。但是我的输出代码是我要调试的,我想知道我是否想偏离它。从好的方面来说,我可以在语言中添加一堆糖。

我认为我最好的选择是#3。

还有其他想法吗?没有转到。没有功能。没有现有的预处理器。

#3 的有趣之处在于它本质上是臭名昭著的 for/switch 噩梦。

4

3 回答 3

3

也许某种突变状态机,即:

int CODEWORD=0x123;

while (CODEWORD)
{
    switch(CODEWORD&15)
    {
    case 1:
       /// case 1
       break;
    case 2:
       /// case 2
       break;
    case 3:
       //// case 3
       break;
    }
    CODEWORD=CODEWORD>>4;
}

DRY,没有预处理器,没有数组。for/switch 似乎有些不可避免。

于 2009-07-19T00:50:39.290 回答
3

您也许可以使用 C 预处理器而不是编写自己的预处理器。这至少可以让你尝试一下,看看它是否是一个可行的解决方案。

于 2009-07-19T00:51:28.573 回答
1

技术上最好的解决方案(假设您可以访问代码或开发人员)是修改 JS 语言来做您真正需要的事情。

如果做不到这一点,最好的解决方案取决于您尚未解释的问题的各个方面:

  1. “函数”是递归的吗?
  2. 有函数参数吗?
  3. 您是否需要(您可能需要)JS 中未提供的其他控制结构?
  4. 函数调用顺序是否取决于运行时参数?
  5. 您是否有足够的技能和信心来设计和实现满足您当前和预计需求的预处理器语言?
  6. 从长远来看,实施预处理器会为您/同事节省时间吗?

如果 5.其他足够多的答案是“是”,那么您的选项 #2 就是正确答案。否则......像你的#1或#3这样的丑陋解决方案实际上可能是一个更好的主意。

编辑:如果您没有源代码访问权限并且开发团队没有响应您的需求,请考虑寻找开源替代方案。

于 2009-07-19T01:10:55.630 回答