【问题标题】:How to find an element in an array of records in Purescript如何在 Purescript 中的记录数组中查找元素
【发布时间】:2019-12-15 15:32:04
【问题描述】:

每个人。 我想在 Purescript 的记录数组中找到一个元素,但由于我对 Purescripot 不熟悉,所以无法解决。

我有一个数组banks,其中包含银行记录。

这是银行记录的类型。

type Bank = {
  id :: Int,
  name :: String
}

我想在banks 中找到一家银行,其 id 与给定的搜索 id 相同。

我尝试如下:

find (_.id == searchId) banks

但收到此错误。


Could not match type
    Int
  with type
    Function
      { id :: t0
      | t1
      }

请帮我解决这个简单的问题。

【问题讨论】:

    标签: purescript


    【解决方案1】:

    表达式_.id 是一个接受Bank 并返回其id 的函数(有点过于简单,但现在已经足够了)。

    举例说明:

    getId = _.id
    bank = { id: 42, name: "my bank" }
    getId bank == 42
    

    然后您使用该函数并尝试将其与searchId 进行比较,我假设它是一个数字。

    好吧,你不能将函数与数字进行比较,这就是编译器告诉你的:“无法将 Int 类型与 Function 类型匹配

    函数find 期望将一个函数作为其第一个参数,该函数接受Bank 并返回Boolean。产生这样一个函数的方法有很多,但最明显的一种是使用 lambda 抽象:

    \bank -> bank.id == searchId
    

    所以要将其插入您的代码中:

    find (\bank -> bank.id == searchId) banks
    

    【讨论】:

      【解决方案2】:

      您可以像这样更改您的代码。

      find(\{id} -> id == searchId) banks
      

      这样就可以得到结果对象了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        • 2017-08-16
        • 1970-01-01
        • 2020-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多