F # использовать именованный кортеж в качестве параметра функции - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть следующий тип в F #:

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

Есть ли способ превратить (Code * Name) [] в именованный массив кортежей в F #? В c# я бы сделал что-то вроде:

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

1 Ответ

4 голосов
/ 17 апреля 2020

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" } |]

Если вы не хотите определять тип (но я не знаю, почему вы этого не хотите), вы можете использовать анонимные записи:

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

CodeNameError [| {| code = "1+1"; name = "test" |} |]
...