Ramda 可以有 isString 吗?
Posted
技术标签:
【中文标题】Ramda 可以有 isString 吗?【英文标题】:Can Ramda have 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
或者查看这个答案以获得更可靠的检查***.com/a/17772086/2880747
所以,我从你的帖子中得出的结论是 Ramda 没有这样的功能,我也不能使用 Ramda 工具编写它。是否有反馈渠道可以让我提出这样的建议?
请参阅我的回答,了解 Ramda 如何提供此功能。但是您可以在 Ramda 的Gitter Channel 上提问或在 Ramda 的Issues page 上提出问题。
【参考方案1】:
除了isString
、isObject
、isArray
、isFunction
等之外,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 返回值的结果感到惊讶。
【讨论】:
以上是关于Ramda 可以有 isString 吗?的主要内容,如果未能解决你的问题,请参考以下文章