Elixir中是否存在非静态函数?

时间:2016-03-21 23:41:35

标签: static elixir

我是Elixir的新手,来自java背景。我在Elix中看到Elixir的函数是静态方法。所以我想知道,Elixir中是否存在任何非静态方法/函数?

谢谢

2 个答案:

答案 0 :(得分:10)

不 - 所有功能都属于一个模块。 Elixir不是一种面向类的语言,所以"实例方法与类方法的概念"不适用。

除了属于模块的典型命名函数之外,还有匿名函数,类似于Java中的lambda。

答案 1 :(得分:6)

接受的答案是正确的,我赞同它。 OOP中的基本构建块是对象。在BEAM(Erlang VM)上,基本构建块是进程。因此,静态/实例方法之间的区别是没有意义的。

但是,在考虑面向对象语言中的实例方法时,有些东西在Elixir中做了类似的事情。

与类方法相比,实例方法是使用内部对象状态的方法。 Elixir没有类或对象,但确实有进程。 GenServer流程实例维护状态并将其传递到每个回调函数中。因此,当您正在寻找具有状态和功能来修改它或返回其中某些内容的内容时,您希望在Elixir中找到GenServer

所有功能仍属于模块。它们不是唯一的函数类型,但它们允许您操作给定过程实例的状态,因为状态作为参数传入并在函数的结果中返回。

响应@ibgib的评论,是的,与Java或C#等面向对象语言相比,您可以将Elixir / Erlang中的所有模块和函数视为静态。这是将苹果与橙子进行比较,但如果在学习这种方式时有所帮助,我认为没问题。只是意识到这里没有实例方法这样的东西。