gpt4 book ai didi

f# - 通用函数签名

转载 作者:行者123 更新时间:2023-12-02 16:02:44 25 4
gpt4 key购买 nike

我正在努力将 C# 应用程序移植到 F#,并且我有这个界面:

public interface ISerializer
{
string ContentType { get; }
string Serialize(object value);
T Deserialize<T>(string value);
}

所以我想定义一个这样的类型:

type Serializer = {ContentType: string; Serialize: Object -> string; Deserialize<'T>: string -> 'T}

但我不能。这里的功能方式是什么?

最佳答案

您可以在 F# 中定义相同的接口(interface),如下所示:

type ISerializer =
abstract ContentType : string
abstract Serialize : obj -> string
abstract Deserialize<'a> : string -> 'a

无法使用自然函数数据类型(例如记录)获得相同的“内部”多态性,因此您必须使用 OO 构造。

如果您确实想使用记录,您可以为反序列化定义一个包装器并将其放入记录中:

type IDeserializer =
abstract Deserialize<'a> : string -> 'a

type Serializer =
{
ContentType : string
Serialize : obj -> string
Deserializer : IDeserializer
}

但我认为这并不值得。

关于f# - 通用函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21866224/

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