为了让您了解我正在尝试做什么: 作为教授排序算法的人,我想让学生能够轻松地想象他们的排序算法是如何工作的,并发现生成器对此非常有用,因为我可以随时中断执行:学生可以编写以下代码可以通过我的图书馆变成动画:
function* bubbleSort(arr){
let done = false;
while(!done){
done = true;
for(let i=1;i<arr.length;i++){
yield {type:"comparison",indexes:[i-1,i]};
if(arr[i-1]>arr[i]){
yield {type:"swap",indexes:[i-1,i]};
swap(arr,i-1,i);
done = false;
}
}
}
return "sorted";
}
这很好用,但如果我可以编写函数 compare(i,j)
和 swap(i,j)
来处理,那就更好了内部 yield (并且在比较的情况下也返回一个 bool 值)。所以我希望能够将以上内容表达为:
function* bubbleSort(arr){
let done = false;
while(!done){
done = true;
for(let i=1;i<arr.length;i++){
if(compare(i-1,i)){
swap(arr,i-1,i);
done = false;
}
}
}
return "sorted";
}
有办法吗?
最佳答案
你可以这样做
if(yield* compare(i-1,i))
这会将 compare
内部的 yield
调用传递到外部。
关于javascript - 有没有办法在 JavaScript 中生成 "outsource"yield 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51613282/