假設我已經定義了一個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