gpt4 book ai didi

generics - F# 泛型编程 - 使用成员

转载 作者:行者123 更新时间:2023-12-04 22:37:27 25 4
gpt4 key购买 nike

假设我有一系列支持给定成员函数的类型,例如 Property下面的成员:

type FooA = {...} with

member this.Property = ...

type FooB = {...} with

member this.Property = ...

假设成员 Property 为上述每种类型返回一个整数。现在,我想编写一个可以执行以下操作的通用函数:
let sum (a: 'T) (b: 'U) = a.Property + b.Property

我习惯用 C++ 编写以下内容:
template<typename T, typename U>
int sum(T a, U b)
{
return a.Property + b.Property;
}

F# 中的等效实现如何?

最佳答案

可以在 F# 中执行此操作,但这不是惯用的:

let inline sum a b = (^T : (member Property : int) a) + (^U : (member Property : int) b)

一般来说,.NET 泛型与 C++ 模板有很大不同,因此在尝试在 F# 中模拟 C++ 之前,可能值得先了解它们的区别。一般的 .NET 理念是操作由名义类型而不是结构类型定义。在您的示例中,您可以定义一个暴露 Property 的接口(interface)。您的两个类实现的属性,然后是您的 sum函数将采用该接口(interface)的实例。

http://msdn.microsoft.com/en-us/library/dd233215.aspx有关 F# 泛型的更多信息; .NET 泛型与 C++ 模板的简要比较见 http://blogs.msdn.com/b/branbray/archive/2003/11/19/51023.aspx (或者当你谷歌“.NET 泛型 C++ 模板”时出现的任何东西)。

关于generics - F# 泛型编程 - 使用成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3622750/

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