gpt4 book ai didi

f# - 如何向 C# 和 F# 公开尽可能友好的类型?

转载 作者:行者123 更新时间:2023-12-04 10:53:41 25 4
gpt4 key购买 nike

例如,如果我在 F# 中编写了一个模块

module Lib

type A =
member this.x1 x = ...

let helpa x = ...
let helpb x = ...

type B =
member this.y1 x = ...

let helpc x = ...

typeA with
member this.x2 x = ...
typeB with
member this.y2 x = ...
open Lib 在 F# 中运行良好, 但是,如果我想在 C# 中使用它(我只对 Lib 中的类型和成员函数感兴趣),每次创建类型时我都必须 new Lib.A(...) .没有办法省略模块名称变得相当烦人。调用像 Lib.A.C() 这样的静态方法更是一件麻烦事。

然后我尝试替换 modulenamespace ,每次我介绍一些辅助函数时,我都必须创建一个具有新名称的新模块。有时我可以设法将所有辅助函数重新排列到 1 个模块中,但这会导致代码的可读性降低。

什么是更好的结构呢?

希望我有: Using * = Lib.*对于 C#。

最佳答案

F# 在这里提供了比 C# 更大的灵 active ,因此我将以标准方式将其公开给 C#,即将类型包含在命名空间中。我认为,这样的东西提供了两全其美:

namespace Lib

type A =
member this.x1 x = ()

[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module A =
let helpa x = ()
let helpb x = ()

type B =
member this.y1 x = ()

[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module B =
let helpb x = ()

type A with
member this.x2 x = ()
type B with
member this.y2 x = ()

F# 系列遵循类似的设计。您可以使用 [<AutoOpen>][<RequireQualifiedAccess>]属性以进一步控制如何从 F# 使用模块。

关于f# - 如何向 C# 和 F# 公开尽可能友好的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14463631/

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