F# 使用命名元组作为函数参数

Rol*_*lan 0 f# tuples c#-to-f#

我在 F# 中有以下类型:

type CodeNameError(CodeNameCombination: (Code*Name)[]) =
member this.CodeNameCombinations = CodeNameCombination
Run Code Online (Sandbox Code Playgroud)

有没有办法将 (Code*Name)[] 转换为 F# 中的命名元组数组?在 c# 中我会做类似的事情:

public CodeNameError((Code code, Name name)[] codeName)
{
    CodeNameCombination = codeName
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*cek 5

F# 没有像 C# 那样具有命名元组,但有一些替代方案。我的首选选择实际上是为该对定义一个新的记录类型Code * Name。如果您遇到想要命名事物的情况,记录是一个不错的选择,并且需要 1 行代码:

type NamedCode = { Name:Name; Code:Code }

type CodeNameError(codeNameCombination:NamedCode[]) =
  member this.CodeNameCombinations = codeNameCombination

CodeNameError [| { Code = "1+1"; Name = "test" } |]
Run Code Online (Sandbox Code Playgroud)

如果您不想定义类型(但我不确定您为什么不想这样做),您可以使用匿名记录:

type CodeNameError(CodeNameCombination: {| code:Code; name:Name |}[]) =
  member this.CodeNameCombinations = CodeNameCombination

CodeNameError [| {| code = "1+1"; name = "test" |} |]
Run Code Online (Sandbox Code Playgroud)

  • 我一直将一个命名元组从 C# 传递到一个采用元组的 F# 类型。最后的输出看起来有点奇怪。谢谢(你的)信息。 (2认同)