gpt4 book ai didi

powershell - Powershell 中的 Lambda 表达式

转载 作者:行者123 更新时间:2023-12-03 06:54:51 25 4
gpt4 key购买 nike

我有一段 C# 代码,它使用 lambda 表达式将委托(delegate)传递给方法。我怎样才能在 PowerShell 中实现这一目标。例如,以下是 C# 代码:

string input = "(,)(;)(:)(!)";
string pattern = @"\((?<val>[\,\!\;\:])\)";
var r = new Regex(pattern);
string result = r.Replace(input, m =>
{
if (m.Groups["val"].Value == ";") return "[1]";
else return "[0]";
});
Console.WriteLine(result);

这是没有 lambda 表达式的 PowerShell 脚本:

$input = "(,)(;)(:)(!)";
$pattern = "\((?<val>[\,\!\;\:])\)";
$r = New-Object System.Text.RegularExpressions.Regex $pattern
$result = $r.Replace($input, "WHAT HERE?")
Write-Host $result

注意:我的问题不是解决这个正则表达式问题。我只想知道如何将 lambda 表达式传递给在 PowerShell 中接收委托(delegate)的方法。

最佳答案

在 PowerShell 2.0 中,您可以使用脚本 block ({ some code here })作为委托(delegate):

$MatchEvaluator = 
{
param($m)

if ($m.Groups["val"].Value -eq ";")
{
#...
}
}

$result = $r.Replace($input, $MatchEvaluator)

或者直接在方法中调用:

$result = $r.Replace($input, { param ($m) bla })

提示:

您可以使用[regex]将字符串转换为正则表达式:

$r = [regex]"\((?<val>[\,\!\;\:])\)"
$r.Matches(...)

关于powershell - Powershell 中的 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10995667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com