f# - F# 中具有不同参数的流水线函数
问题描述
我有以下代码:
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
Customer 记录类型有 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
我收到这样的错误
如何流水线化具有附加参数的函数?
解决方案
您可以尝试更改最后一个方法参数的顺序。
let checkCustomerInBlockedList (blockedList: string seq) (customers: Customer seq) =
customers
正向管道运算符将左侧的参数发送到右侧的函数。如果您最后一次调用,您有或左侧有一个客户序列,但在右侧您有一个带参数的方法,因此您的序列将作为最后一个参数提供。
您的最后一条语句看起来就像checkCustomerInBlockedList blockedList customers
这就是为什么更改参数的顺序会使编译器高兴的原因。
推荐阅读
- java - Micronaut 应用程序中的截断 protobuf
- python - 可视化 3 个相似时间序列数据集之间的差异
- reactjs - 反应路由器链接更改网址但不是组件
- vue.js - Nuxt - 我可以在通用模式下从中间件运行客户端代码吗?
- python - 太多的值无法解包(在读取图像的形状时)
- node.js - 从 NextJS 到节点后端的套接字连接
- r - 用 dplyr 在 R 中索引一个组
- google-cloud-platform - SuiteCRM、GCP 和 Maria DB - 太多了?
- javascript - 如何使用为 webp 服务的自定义 url 图像更改博客中的所有 url 图像
- xcode - 如何在我的物理手表上从 XCode 预览我的应用程序