Jef*_*eff 13 oop erlang functional-programming
我正在学习Erlang,我正在尝试创建一个非常示例的博客程序.然而,我的思想目前被困在OO世界中(var p = new Post(); p.Title =""; p.Save();).我想了解Erlang中的一些基本思路.而不是创建Post对象在数据结构方面应该做些什么(p.Title,p.DateCreated,p.Body)?我应该使用元组吗?我想了解推荐的做这种事情的方法(特定于Erlang和/或特定于功能编程).或者我在Erlang或FP中做的根本错误是什么?
要求(以OO术语,不确定如何用FP术语解释^ _ ^):
谢谢.
更新:我不是在寻找在Erlang中进行OOP的具体方法,除非它是推荐的方式.我正在寻找标准/推荐的方式来做问题中描述的内容,但我并不是想在Erlang中复制OOP.
Erlang 是一种面向对象的语言.如果你像Alan Kay所描述的那样看OOP,这个陈述就有了更多的权力:
OOP对我来说意味着只有消息传递,本地保留和保护以及隐藏状态进程,以及所有事物的极端后期绑定.
正如您必须意识到的那样,Erlang提升了一种称为面向并发编程的编程风格,在该编程风格中,您将对象抽象为通过消息传递进行通信的独立进程.每个进程都有它的本地状态,它们生活在自己的并行世界中.动态多态性是通过以下事实实现的:您可以定义一类可以响应一组公共消息的进程.由于Erlang'对象'生活在他们自己的微小过程中,它成为现实世界建模的自然媒介.您可以在Erlang中比任何其他语言更好地利用您的OOP技能.
无法在如此小的空间内给出Erlang中OOP的完整描述.我建议您阅读" 编程Erlang:并行世界的软件"一书.
另见这些链接:
我会用记录:
-record(post, {title, date_created, body, comments = []}).
-record(comment, {created_by, date_created, content}).
Run Code Online (Sandbox Code Playgroud)
然后,如果你想使用mnesia作为数据库:
Post = #post{title = "", body = "", date_created = erlang:universaltime()},
mnesia:transaction(fun() -> mnesia:write(Post) end).
Run Code Online (Sandbox Code Playgroud)
要添加评论:
Comment = #comment{created_by = "", content = "", date_created = erlang:universaltime()},
mnesia:transaction(fun() ->
[Post] = mnesia:read(post, Title),
PostWithNewComment = Post#post{comments = [Comment | Post#post.comments]},
mnesia:write(PostWithNewComment)
end).
Run Code Online (Sandbox Code Playgroud)
我没有测试过代码,但这就是我要做的.我还假设每个标题都是独一无二的.
| 归档时间: |
|
| 查看次数: |
2294 次 |
| 最近记录: |