gpt4 book ai didi

c# - C# 中的延续

转载 作者:行者123 更新时间:2023-11-30 20:45:52 25 4
gpt4 key购买 nike

我有一个关于 C# 中延续的问题。我这里有一个示例,来自 Tomas Petricek 和 Jon Skeet 的Real World Functional Programming一书。

void StringLengthCont(string s, Action<int> cont) {
cont(s.Length);
}

void AddLengthsCont() {
StringLengthCont("One", x1 =>
StringLengthCont("Two", x2 =>
Console.WriteLine(x1 + x2)
))
}

现在这让我很困惑。在这种情况下,我们有一个方法,StringLengthCont这需要一个字符串,s和一个 Action<int> cont然后它调用 Action<int>长度为 s作为论点。

至此我明白了。但是最后一次调用 StringLengthCont 的内部 lambda没有Action<int,int>的签名吗? ?在我看来,它需要两个整数,将它们相加并返回一个空值。

最佳答案

But the inner lambda of the last call to StringLengthCont doesn't that have signature of Action ?

没有。发生的情况如下:

你调用StringLengthCont第一次,需要 Action<int> .传递的实际操作(作为 Lambda 表达式)调用 StringLengthCont再次。第二次,它传递“Two”作为字符串参数,并创建一个名为 x2 的参数。正在传递给 StringLengthCont (第二个)作为参数。因为两者都是x1x2仍在范围内(这发生在捕获的变量和编译器处理 lambda 表达式的方式上),我们将它们传递给 Console.WriteLine为了打印这两个整数的加法。

也许这样看会更清楚:

StringLengthCont("One", new Action<int>(x1 => 
StringLengthCont("Two",
new Action<int>((x2) =>
Console.WriteLine(x1 + x2)))));

或者这样:

void AddLengthsCont()
{
StringLengthCont("One", x1 => CallStringLengthAgain(x1));
}

private void CallStringLengthAgain(int x1)
{
StringLengthCont("Two", x2 => Console.WriteLine(x1 + x2));
}

关于c# - C# 中的延续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27686187/

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