0

我有以下我一直在开发的代码,一个备用while循环:

_while = (cond, act) => cond && act() & _while(cond, act)

在这种情况下act(),旨在改变cond每次迭代的最终结果,直到cond被评估为false,然后循环意味着结束......

我试图通过使用我的代码单步执行字符串来确定字符串的长度来对此进行测试。结果,我的代码如下:

len = 0; _while(!!("qwerty")[len], ()=>++len);

现在,我的想法是,这段代码基本上会逐步执行并测试字符串中每个字符的存在,递增len直到它尝试"qwe"[6]which is undefined,并将返回的值!!呈现为,退出循环,值等于...undefinedfalselen6

但是,我什至没有走那么远......由于某种原因,这个循环继续进行,并放弃了一个错误InternalError: too much recursion

谁能看到我的代码做错了什么?我想保留我可以保留的原始代码,而不必求助于本机forwhile循环......

4

1 回答 1

2

表达式在实际!!("qwerty")[len])调用之前进行评估_while。那时,len0,所以表达式的结果将是true

要解决此问题,您可能需要cond成为一个函数,就像actis。这样,您可以在每次循环中评估条件。我想它看起来像这样(虽然我不精通 JavaScript):

_while = (cond, act) => cond() && act() & _while(cond, act)

给定的例子将变成

len = 0; _while(()=>!!("qwerty")[len], ()=>++len);
于 2015-07-23T00:05:35.837 回答