我有以下代码:
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
一切正常。 但是,当我添加第三个函数时,
customers
|> checkCustomerFirstName
|> checkCustomerLastName
|> checkCustomerInBlockedList blockedList
我收到这样的错误
如何对具有附加参数的函数进行管线处理?
答案 0 :(得分:3)
您可以尝试更改最后一个方法参数的顺序。
let checkCustomerInBlockedList (blockedList: string seq) (customers: Customer seq) =
customers
Forward Pipe运算符会将您左侧的参数发送到右侧的函数。如果是您的上次呼叫,则您或客户的左侧是一个序列,但在右侧,您有一个带有参数的方法,因此您的序列将作为最后一个参数输入。
您的最后一条语句看起来像checkCustomerInBlockedList blockedList customers
,这就是为什么更改参数顺序会使编译器满意的原因。