- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
关闭。这个问题需要更多focused .它目前不接受答案。
想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .
3年前关闭。
Improve this question
JavaScript 中的函数式编程是否可以具有任何类型的多态性?
我喜欢 FP,但是当我想使用 JS 时,除了使用类/原型(prototype)之外,我无法弄清楚如何在 JS 中支持多态性。
例如如何实现 toString
在 JS 中使用 FP?
使用 OOP 我可以简单地重载 toString
以便 object.toString()
执行特定于 object
的 toString 代码或者它的原型(prototype)。
最佳答案
Javascript 是一种无类型语言
不,Javascript 没有多态的概念,因为它是一种无类型语言。简单地说,多态意味着严格的类型系统在受控条件下不那么严格,也就是说它不会因多态行为而失去类型安全性。
不过,无类型语言稍微简化了一些。从静态类型系统的 Angular 来看,Javascript 有一个巨大的联合类型,一个值或其底层表达式可以在运行时采用其任何表示形式(变量甚至可以在其存在期间适应不同的类型)。这种类型也称为动态类型。
动态类型语言具有自省(introspection)功能,可以在运行时检查值的类型。但这种手段是有限的。例如,你不能内省(introspection)函数的类型,只要它没有被完全应用。
然而,原始意义上的函数式编程意味着使用许多小的、专门的一阶和高阶函数,这些函数在 curried form 中声明。 .这种方法会导致在您的代码中部分应用函数。现在的问题是,您不仅要推断初始函数的类型,还要推断部分应用函数的中间类型。这将很快变得艰难:
// what's the type of this function?
const comp = f => g => x => f(g(x));
// and this partially applied one?
const inc = n => n + 1;
comp(inc);
// and even worse:
comp1 = comp(comp);
comp2 = comp(comp) (comp);
comp
上面的组合器作为带有类型提示的类型化版本(
TS
只是一个内部
Symbol
,它保存了类型的当前签名,您可以使用它来请求此签名以进行调试):
import * as F from ".../ftor.js";
F.type(true);
const comp = F.Fun(
"(comp :: (b -> c) -> (a -> b) -> a -> c)",
f => g => x => f(g(x))
);
const inc = F.Fun(
"(inc :: Number -> Number)",
n => n + 1
);
comp(inc) [TS]; // "(comp :: (a -> Number) -> a -> Number)"
const comp1 = comp(comp),
comp2 = comp(comp) (comp);
comp1 [TS]; // "(comp :: (a -> b0 -> c0) -> a -> (a0 -> b0) -> a0 -> c0)"
comp2 [TS]; // "(comp :: (b1 -> c1) -> (a0 -> a1 -> b1) -> a0 -> a1 -> c1)"
comp1
的中间类型签名告诉您它期望...
comp1(inc) (1) (add) (2) (3)
一样应用它.
comp2
的中间类型签名告诉您它期望...
comp2(inc) (add) (2) (3)
一样应用它.所以
comp2
实际上很有用,因为它允许我们应用二元函数作为组合的内部函数。
关于javascript - JavaScript 中的函数式编程是否可以具有任何类型的多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48257447/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!