0

私が開発している次のコード、代替whileループがあります。

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

この場合、は が に評価されるまで各反復act()で の最終結果を変更することを目的としています。condcondfalse

コードを使用して文字列をステップ実行して文字列の長さを判断しようとすることで、これをテストしようとしました。その結果、私のコードは次のようになります。

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

さて、私の考えでは、このコードは基本的にステップスルーし、文字列内の各文字の存在をテストし、どれが であるかを試行するまでインクリメントし、len返された値を にレンダリングし、ループを終了します。..."qwe"[6]undefined!!undefinedfalselen6

しかし、私はそこまで進んでいません...何らかの理由でこのループが続き、次のエラーであきらめますInternalError: too much recursion

私のコードで何が間違っているのか、誰にもわかりますか? forネイティブやwhileループに頼ることなく、元のコードでできることを維持したい...

4

1 に答える 1

2

!!("qwerty")[len])は、への呼び出し_whileが実際に行われる前に評価されます。そのときlenは です0ので、式の結果は になりますtrue

condこれを修正するには、関数である必要がありますact。このようにして、ループのたびに条件を評価できます。次のようになると思います (ただし、私は JavaScript に精通していません)。

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

与えられた例は次のようになります

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