Функции конвейеризации с разными параметрами в F # - PullRequest
1 голос
/ 12 апреля 2019

У меня есть следующий код:

type CustomerStatus = |Valid |Invalid 
type Customer = {Id:int; FirstName: string; LastName:string; Status: CustomerStatus}

let checkCustomerFirstName (customers: Customer seq) =
    customers

let checkCustomerLastName (customers: Customer seq) =
    customers

let checkCustomerInBlockedList (customers: Customer seq) (blockedList: string seq) =
    customers

Тип записи клиента имеет 4 атрибута: Id, FirstName, LastName и Status.CustomerStatus определяется в строке выше как DU с действительными и недействительными.Затем у меня есть три функции для проверки последовательности клиентов, для краткости я опустил тело функции.Обратите внимание, что третья функция принимает второй параметр - список строк, с которыми сравнивается имя клиента, чтобы определить, являются ли они недействительными.

Вот некоторые тестовые данные:

let customers =
    [
        {Id=0;LastName="Customer0";FirstName="Test";CustomerClass=Valid}
        {Id=1;LastName="Customer1";FirstName="Test";CustomerClass=Valid}
        {Id=2;LastName="Customer2";FirstName="Test";CustomerClass=Valid}
        {Id=3;LastName="Customer3";FirstName="Test";CustomerClass=Valid}
        {Id=4;LastName="Customer4";FirstName="Test";CustomerClass=Valid}
    ]

let blockedList = ["Customer3"]

Когда яКонвейер первых двух функций, как это:

customers
|> checkCustomerFirstName
|> checkCustomerLastName

Все работает как положено.Однако, когда я добавляю в 3-ю функцию,

customers
|> checkCustomerFirstName
|> checkCustomerLastName
|> checkCustomerInBlockedList blockedList

, я получаю такую ​​ошибку

enter image description here

Как выполнить конвейерфункции, которые имеют дополнительные параметры?

1 Ответ

3 голосов
/ 12 апреля 2019

Вы можете попробовать изменить порядок параметров вашего последнего метода.

let checkCustomerInBlockedList (blockedList: string seq) (customers: Customer seq) =
    customers

Оператор прямой трубы отправляет параметр, который вы имеете слева, в функцию справа.В случае вашего последнего вызова у вас есть или слева последовательность клиентов, но справа у вас есть метод с параметром, поэтому ваша последовательность будет передана как последний параметр.

Ваше последнее утверждение выглядит как checkCustomerInBlockedList blockedList customers, поэтому изменение порядка параметров сделает компилятор счастливым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...