Я написал это (который работает):Powershell эквивалент F # Seq.forall
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) с функцией называется что-то вроде $ предикат, который я передаю в функцию ForAll. Кажется, я не могу заставить это работать. Есть идеи?
Stej, я замечаю в этом, что [ScriptBlock] на самом деле не требуется, если $ _ заменяется на $ арг [ 0]. В ту ночь я был очень смущен, пытаясь заставить это работать. В конце концов, самая короткая версия, которую я получил, - это просто небольшое изменение на вашем. функция ForAll ($ сказуемое) {...} $ ALIST = (0..4) $ Blist = (1..4) $ ALIST | ForAll {$ _ -gt 0} # возвращает false $ bList | ForAll {$ _ -gt 0} # возвращает true $ bList | ForAll {$ _ -gt 0- и $ _ -lt 5} # возвращает true –
Да, это определенно верно. Вы можете использовать автоматическую переменную - она выглядит так же, как командлет foreach-object. Однако у меня были проблемы с более сложными сценариями с $ _, поэтому я не решаюсь использовать $ _. – stej