【问题标题】:Can Ramda have isString?Ramda 可以有 isString 吗?
【发布时间】:2018-05-27 15:36:57
【问题描述】:

背景

我正在尝试使用 ramda,我需要一个纯函数来让我知道给定的输入是否为字符串,就像 lodash _.isString

问题

在到处搜索之后,我在 Ramda 中找不到任何东西。所以我想知道,有没有办法使用 Ramda 现有的任何函数,我可以创建一个isString 函数?

我发现这非常有限,我不可能在最后只使用 lodash :S

【问题讨论】:

  • 使用const isString = x => typeof x === 'string'有什么问题吗?
  • 只需使用const isString = x => typeof x === 'string' && x instanceof String
  • 或者查看这个答案以获得更可靠的检查stackoverflow.com/a/17772086/2880747
  • 所以,我从你的帖子中得出的结论是 Ramda 没有这样的功能,我也不能使用 Ramda 工具编写它。是否有反馈渠道可以让我提出这样的建议?
  • 请参阅我的回答,了解 Ramda 如何提供此功能。但是您可以在 Ramda 的Gitter Channel 上提问或在 Ramda 的Issues page 上提出问题。

标签: javascript ramda.js


【解决方案1】:

除了isStringisObjectisArrayisFunction 等之外,Ramda 只提供了 is,您可以使用它来创建您喜欢的任何这些:

const isString = R.is(String)
const isRectangle = R.is(Rectangle)

isString('foo') //=> true
isString(42) //=> false

isRectangle(new Rectangle(3, 5)) //=> true
isRectangle(new Square(7)) //=> true (if Rectangle is in the prototype chain of Square)
isRectangle(new Triangle(3, 4, 5)) //=> false

而且您不必创建中间函数。你可以直接使用它:

R.is(String, 'foo') //=> true
R.is(String, {a: 'foo'}) //=> false

【讨论】:

  • 再次获得难以置信的宝贵输出。先生,你应该得到这个赞成票的所有汁液!
【解决方案2】:

这也应该可以R.type(x) === "String"

【讨论】:

    【解决方案3】:

    如果您正在寻找 ramda 的谓词函数,您应该查看 ramda-adjunct 库。 ramda 最流行和最广泛使用的扩展,附带 ramda 没有的好东西,由于各种原因,也永远不会实现。我负责维护这个库,我们有超过 25 个贡献者。

    关于 R.is,我会小心使用这个函数,它在底层使用 JavaScript instanceof 运算符。当检查来自不同 JavaScript 领域/环境的对象时,例如IFrame,您可能会对 R.is 返回值的结果感到惊讶。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 2020-04-27
      • 1970-01-01
      相关资源
      最近更新 更多