[英]Visualising pattern matching in JavaScript
我有一個與 function 匹配的簡單模式,我正在嘗試減慢每個比較的執行速度,以便為它創建一個可視化器。 但是,我希望能夠在 function 之外訪問我的 i 和 j 變量。 我試圖通過在 function 之外聲明它們,將它們傳入並在每場比賽后返回它們來做到這一點。 這樣我可以按一個按鈕來控制執行流程。 但是,它們沒有正確返回,我懷疑這與我使用 async/await 有關,並且需要將值作為 Promise 返回。
https://codesandbox.io/s/staging-http-0zm04?file=/src/App.tsx:0-1072
import React, { useState } from "react";
import "./styles.css";
const delay = (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms));
export const naive = async (text: string, pattern: string, i: number, j: number) => {
const matches = [];
let n = text.length;
let m = pattern.length;
while (i < n){
while (j < pattern.length && pattern[j] === text[i + j]){
j += 1;
await delay(500);
}
if (j === m){
matches.push(i)
}
return [i, j, matches]
}
}
export default function App() {
const [text, setText] = useState<string>("abcdefghijklmnopqrstuvwxyzabcd")
const [pat, setPat] = useState<string>("abc")
const [i, updateI] = useState(0);
const [j, updateJ] = useState(0);
const nextMatch = () => {
let results = naive(text, pat, i, j);
updateI(results[0]);
updateJ(results[1]);
}
return (
<div>
<button style = {{width: "100px", height: "50px"}}onClick = {() => nextMatch()}/>
{i}
{j}
</div>
);
}
由於 navie 是異步 function 你必須添加then 。這將有助於返回正確的 i 和 j 值
const nextMatch = () => { naive(text, pat, i, j).then((results) => { updateI(results[0]); updateJ(results[1]); }); };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.