Powershell 相当于 F# Seq.forall

2023-12-30

我写了这个(有效):

function ForAll {
    BEGIN {
        $allTrue = $true
    }
    PROCESS {
        if ($_ -lt 1) { $allTrue = $false }  
    }
    END {
        $allTrue
    }
}

$aList = (0..4)
$bList = (1..4)

$aList | ForAll # returns false
$bList | ForAll # returns true

但我想要做的是将 ($_ -lt 1) 替换为一个名为 $predicate 的函数,我将其传递到 ForAll 函数中。我似乎无法让它发挥作用。有任何想法吗?


使用[scriptblock],恕我直言,它比这里使用函数要容易得多。这就是发明脚本块的任务。

function ForAll([scriptblock]$predicate) {

    BEGIN {
        $allTrue = $true
    }
    PROCESS {
        if (!(& $predicate $_)) { $allTrue = $false }  
    }
    END {
        $allTrue
    }
}

$aList = (0..4)
$bList = (1..4)

$aList | ForAll {$args[0] -le -10 } # returns false
$bList | ForAll {$args[0] -le 10 } # returns true

$args[0] 表示传递给脚本块的第一个参数 - 在本例中为 $_。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Powershell 相当于 F# Seq.forall 的相关文章

随机推荐