- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
试图弄清楚如何使用 fp-ts 对多个案例进行建模。不确定我对这个操作的心理模型是否应该在 fp-ts 中有所不同,我是否找不到合适的函数来使用,或者这样的函数不存在。
供引用,https://ramdajs.com/docs/#cond (Lodash 中相同的签名+行为)
示例案例是加载/加载状态,或在枚举上拆分案例。例如,
enum abcd {a,b,c,d}
const getCaseResult = cond([
[is(a), getResultA],
[is(b), getResultB],
[is(c), getResultC],
[is(d), getResultD],
])
getCaseResult('a') // returns result of getResultA('a')
最佳答案
我深入研究了 Ramda 的类型定义,因为我很好奇如果实际上谓词函数是类型保护,它们是如何处理类型的。事实证明他们没有使用类型保护来缩小类型。 See DefinitelyTyped Code .
顺便说一句,那里的评论实际上使他们给出的类型定义无效:
If none of the predicates matches, fn returns undefined.
但是类型声明它返回一个 R
而不是 R |未定义
。我尝试使用 fp-ts
实用程序实现具有等效类型的 cond
,因为正如一些评论者指出的那样,它看起来不像 fp-ts
有一个内置的等价于 cond。
这样的事情对你有用吗?
import { reduce } from "fp-ts/lib/Array";
import { alt, some, none, fold, Option } from "fp-ts/Option";
import { pipe } from "fp-ts/lib/function";
type CondPair<T extends any[], R> = [
(...args: T) => boolean,
(...args: T) => R
];
const cond = <T extends any[], R>(pairs: Array<CondPair<T, R>>) => (
...args: T
): R | undefined =>
pipe(
pairs,
reduce(
none,
(prev: Option<R>, [pred, res]: CondPair<T, R>): Option<R> =>
pipe(
prev,
alt(() => (pred(...args) ? some(res(...args)) : none))
)
),
fold(
() => undefined,
(r) => r
)
);
enum abcd {
a,
b,
c,
d
}
const is = <T>(t: T) => (x: unknown) => t === x;
function isResultA(a: abcd) {
return 1;
}
function isResultB(b: abcd) {
return 2;
}
function isResultC(c: abcd) {
return 3;
}
function isResultD(d: abcd) {
return 4;
}
const getCaseResult = cond([
[is(abcd.a), isResultA],
[is(abcd.b), isResultB],
[is(abcd.c), isResultC],
[is(abcd.d), isResultD]
]);
for (let x of [abcd.a, abcd.b, abcd.c, abcd.d]) {
console.log(getCaseResult(x));
} // Logs 1, 2, 3, 4 respectively
关于Lodash 或 Ramda `cond` 的 FP-TS 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68569750/
我曾尝试在 clojure 中使用 mini-kanren 的实现。但是一直在努力理解 cond-a cond-u 和 cond-e 之间的区别。我似乎很清楚 cond-e 但对 cond-a 和 c
我有一个基本上可以实现的功能 (cond ( (cond) (cond) ) ) 目前计划对我来说似乎是一门外语。我的问题很简单。仅当嵌套条件也返回 true 时,如何
我是 Java 的新手,正在尝试学习迭代器的概念。我在 Java 教程 Oracle 中遇到过这段代码。我的问题是,if (!cond(it.next())) 中的 cond 代表什么。文档没有指定
我正在阅读一个名为 Panda.js 的游戏引擎。核心中有一个方法检查浏览器是否支持全屏,但我不明白这段代码: if (this.system.canvas.requestFullscreen)
我试图了解这两个可观察量之间的区别。代码中唯一的区别是: /** * Inside rxjs pipe */ if(typeof x === 'number' && x > 3) { retu
这两个表达式生成的结果似乎相同。它们之间有什么区别吗? 最佳答案 如果您的 cond 条件为真,但您的 value 不是,则第一个表达式将转到 default_value,而您的第二个表达式只要 co
我正在通过解析类似 Excel 的公式来生成 sql 请求。 因此,对于给定的公式,我收到以下请求: SELECT IF(COL1='Y', SUM(EXPR),NULL) FROM Table 我没
当我执行 np.where(temp == True) 时,PyCharm 会发出警告 我的完整代码: from numpy import where, array a = array([[0.468
是否有任何隐藏的微妙之处,一个是首选,还是一个只是编写另一个的更短方式? Client = db.Clients.First(c=>c.Name == "Client 1") 和 Client = d
if user.item.purchase.status == True: ...使用 flake8 检查时产生错误: E712 comparison to True should be 'if co
我在行“added_parts = new_part_set[(new_part_set["duplicate"] == False) & (new_part_set["version"] ==
1. 简介 本文将介绍 Go 语言中的 sync.Cond 并发原语,包括 sync.Cond 的基本使用方法、实现原理、使用注意事项以及常见的使用使用场景。能够更好地理解和应用 Co
为了在 MongoDB 中对元素进行分组和计数,我已经筋疲力尽了。有很多帖子,但没有一个是我需要的。 这是一个基于以下内容的示例: styvane answer db.VIEW_HISTORICO.a
我正在尝试创建一个计算 状态 我的 Mongo 查询中的字段(状态:已创建、已收到付款、已发货、已收到、已完成)。 db.orders.aggregate( [ { $project: { st
在 Clojure 中的 cond 语句内格式化大型子句的推荐方法是什么? 例如: (cond (> (large-function large-arg1 l
我遇到过很多情况,如果满足特定条件,则需要“更新”两个(甚至三个)值的向量,否则就不用管。示例: (let [val1 some-value val2 some-other-value
scala 有与scheme 的 cond 等价的东西吗? 最佳答案 我猜您正在寻找match(或者只是if/else if/else)。 关于scala - Scala语言中的scheme cond
我正在构建一个 RNN 模型,其中 init_state 可能来自两种情况之一。 1) 通过 feed_dict 从之前的时间步长输出状态输入的静态 init_state。 2) 变量的一些函数,我称
根据https://golang.org/pkg/sync/#Cond.Wait ,必须将 Wait() 调用包装在 for 循环中,因为在第一次恢复时,据称 c.L 没有被锁定。这与上面的句子“..
我正在尝试通过 rmongodb 中的操作在组中执行求和。我求和的“列”包含 NaN 值,导致我的总和返回 NaN。在通过命令运行组之前,我想使用 $project 用零替换 NaN,但我被卡住了。
我是一名优秀的程序员,十分优秀!