【发布时间】:2012-09-01 21:19:48
【问题描述】:
我在使用 Java/C# 构建企业应用程序方面拥有丰富的经验,并且已经习惯了面向对象的静态类型语言所带来的所有陷阱。具体来说,我已经非常擅长使用行业标准工具来处理系统复杂性:
- 接口/抽象类型
- 对象组合
- 依赖倒置
我被要求使用动态的函数式语言 (Lua) 设计一个相当复杂的后端消息处理系统。函数式语言如今风靡一时(NodeJs、JavaScript 等),所以我很高兴借此机会加入上述潮流。
谁能推荐一个示例应用程序或架构,我可以使用它来学习如何使用诸如一流函数、闭包、currying 来构建一个复杂、松散耦合的系统?
非常感谢!
【问题讨论】:
-
Lua 不是函数式语言。它具有函数式编程的元素,但仅仅将函数作为一等对象并不意味着它是一种函数式编程语言。
-
@NicolBolas,在这种情况下,你会说 Scheme 也不是函数式语言吗?
-
@finnw:我不太了解Scheme。但我确实知道函数式编程是什么,而且我知道 Lua 不是。仅仅因为一种语言有闭包并不能使它起作用。 Functional programming 包括不可变的状态等等,Lua 很不擅长。在 Lua 中编写纯函数非常困难,函数式编程不应该让编写纯函数变得困难。
-
@NicolBolas,我看到之前已经在 SO 上讨论过这个问题,例如stackoverflow.com/q/2291742,stackoverflow.com/q/214913。我猜 Scheme 是“祖父”,因为它在出现时被认为是一种函数式语言,但它不符合今天使用的更严格的定义(由与 Haskell、Clojure 等一起长大的人使用)
-
@finnw Scheme 允许编写纯函数、避免可变状态等。然而,它并不需要它,而且它并没有真正使用任何花哨的东西隔离 IO。
标签: node.js architecture functional-programming lua closures