gpt4 book ai didi

c# - C# 扩展方法和 F# 管道转发运算符之间有什么关系?

转载 作者:太空狗 更新时间:2023-10-30 00:28:22 25 4
gpt4 key购买 nike

在使用 F# 解决一些小问题后,我发现将 C# 扩展方法视为“一种将 .进入管道前向运算符”。

例如,给定一个名为 ints 的 Int32 序列,C# 代码:

ints.Where(i => i > 0)
.Select(i => i * i)

类似于F#代码

let where = Seq.filter
let select = Seq.map

ints |> where (fun i -> i > 0)
|> select (fun i -> i * i)

事实上,我经常将 IEnumerable 上的扩展方法简单地看作是一个函数库,它提供与 F# 的 Seq 模块类似的功能。

显然,管道参数是 F# 函数中的最后一个参数,但 C# 扩展方法中的第一个参数 - 但除此之外,在描述扩展方法或向其他开发人员传递管道时使用该解释是否存在任何问题?

我会不会误导他们,或者这是一个有用的类比?

最佳答案

我不会做这样的类比,因为可以调用扩展方法,就好像它是实例方法一样,而管道在语法上显然是完全不同的。此外,F# 还具有扩展方法(以及扩展属性和事件!),因此我认为确实有可能引起混淆。

但是,我认为管道样式和扩展方法确实允许将计算流畅地描述为一组步骤,这可能是您所追求的相似之处。从概念上讲,最好让代码反射(reflect)“采用这组整数,仅保留满足 i>0 的子集,然后对每个进行平方”的想法,这就是用英语描述任务的方式。管道语法和 C# 扩展方法都允许这种事情。

关于c# - C# 扩展方法和 F# 管道转发运算符之间有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3240266/

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