如何记住 PowerShell 中的函数?

Joa*_*rel 3 powershell memoization

string --> string我在 PowerShell 中有一个执行速度相当慢的函数,我想记住它,以保留所有输入/输出对,以加快一遍又一遍调用该函数的执行速度。我可以想到许多复杂的方法来实现这一目标。有人能提出一些不太复杂的建议吗?

Jer*_*ert 6

好吧,这是一个尝试。我绝对不能说这是一个好的或有效的方法;事实上,即使想出可行的方法也很棘手,PowerShell 专家可能会做得更好。

顺便说一句,这对于脚本语言来说是一个巨大的杀伤力(全局变量要简单得多),所以这绝对是一个智力练习。

function Memoize($func) {
    $cachedResults = @{}
    {
        if (-not $cachedResults.ContainsKey("$args")) {
            echo "Remembering $args..." #for illustration
            $cachedResults.Add("$args", $func.invoke($args))
        }
        $cachedResults["$args"]
    }.getnewclosure()
}


function add($a, $b) {
    return $a + $b;
}

$add = Memoize ${function:add};

&$add 5 4
&$add 5 4
&$add 1 2
Run Code Online (Sandbox Code Playgroud)