gpt4 book ai didi

javascript - 如何使用新的 while 语句扩展 Javascript

转载 作者:行者123 更新时间:2023-11-28 14:20:18 27 4
gpt4 key购买 nike

我正在尝试创建一种在 Javascript 中实现循环的新方法。用户将输入

Loop(n)
{
// code to repeat
}

并且新的循环函数将重复大括号内的代码“n”次。它只需在后端使用计数器变量实现一个 while 循环。

我知道如何创建原型(prototype)函数,但我需要的不仅仅是向函数传递参数。我希望 Loop(n) 语句重复编码器指定的代码块。

我查看过 Sweet.js,但似乎没有任何引用资料来说明我的建议。

我该如何去做呢?

最佳答案

Sweet.js 文档确实有 an example你可以应用到循环。这是一个简单的版本:

syntax loop = function (ctx) {
const count = ctx.next().value;
const code = ctx.next().value;
return #`for (let __n = 0; __n < ${count}; ++__n) ${code}`;
}

...尽管可能有更好的方法来创建循环变量。

你可以像这样使用它:

loop 10 {
// ...your code here...
}

Try it out here

我可能想指定用于计数器的标识符:

syntax loop = function (ctx) {
const count = ctx.next().value;
const identifier = ctx.next().value;
const code = ctx.next().value;
return #`for (let ${identifier} = 0; ${identifier} < ${count}; ++${identifier}) ${code}`;
}

然后:

loop 10 index {
console.log(index);
}

Try it out here

如果您愿意,我希望有一种方法可以使标识符成为可选的。

<小时/>

也就是说,我只使用您传递回调的函数:

function loop(end, callback) {
for (let n = 0; n < end; ++n) {
callback(n);
}
}

loop(10, n => console.log(n));
.as-console-wrapper {
max-height: 100% !important;
}

您可以轻松地使其功能更加齐全:

function loop(end, start, step, callback) {
if (typeof end !== "number") {
throw new Error("'end' should be a number");
}
if (typeof start === "function") {
callback = start;
start = 0;
step = 1;
} else if (typeof step === "function") {
callback = step;
step = 1;
}
if (typeof start !== "number") {
throw new Error("'start' should be a number");
}
if (typeof step !== "number") {
throw new Error("'step' should be a number");
}
for (let n = start; n < end; n += step) {
callback(n);
}
}

console.log("loop(3, n => console.log(n));");
loop(3, n => console.log(n));
console.log("loop(3, 1, n => console.log(n));");
loop(3, 1, n => console.log(n));
console.log("loop(6, 0, 2, n => console.log(n));");
loop(6, 0, 2, n => console.log(n));
.as-console-wrapper {
max-height: 100% !important;
}

关于javascript - 如何使用新的 while 语句扩展 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55450154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com