假设我已经定义了一个Erlang的演员是这样的:Erlang与OOP对象有什么不同?
counter(Num) ->
receive
{From, increment} ->
From ! {self(), new_value, Num + 1}
counter(Num + 1);
end.
同样,我已经定义了一个Ruby类是这样的:
class Counter
def initialize(num)
@num = num
end
def increment
@num += 1
end
end
Erlang的代码写在一个实用的风格,采用尾递归维护状态。但是,这种差异的有意义的影响是什么?对我天真的眼睛来说,这两件事的接口看起来差不多:你发送一条消息,状态得到更新,并且你得到新状态的表示。
函数式编程通常被描述为与OOP完全不同的范例。但是Erlang的角色似乎确实做了对象应该做的事情:维护状态,封装并提供基于消息的接口。
换句话说,当我在Erlang之间传递消息时,它与在Ruby对象之间传递消息时有什么不同?
我怀疑功能/ OOP二分法有比我看到的更大的结果。任何人都可以指出它们吗?
让我们抛开Erlang actor被VM安排的事实,因此可能会与其他代码同时运行。我意识到这是Erlang和Ruby版本之间的主要区别,但这不是我所掌握的。其他语言(包括Ruby)可能会发生并发。尽管Erlang的并发性可能表现得非常不同(有时更好),但我并没有真正问到性能差异。
相反,我对问题的功能与面向对象方面更感兴趣。
IMO的例子太小/分离,以显示有意义的差异。很明显,在这种情况下,*概念*差异很小。在这个微不足道的例子中,其他考虑因素更重要。 – 2013-03-01 00:34:49