Elixir中是否存在非静态功能?

Faj*_*rmf 3 static elixir

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

谢谢

Cod*_*oll 10

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

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


Cod*_*nis 6

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

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

与类方法相比,实例方法是使用内部对象状态的方法.Elixir没有类或对象,但它确实有进程.一个GenServer流程实例保持状态,并将其传递到每一个回调函数.因此,当您正在寻找具有状态和功能的东西来修改它或返回它的某些部分时,那么您想要在Elixir中找到GenServer.

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

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

  • 这与采访Joe Armstrong(Erlang的共同创作者之一)有关,他说Erlang(以及现在的Elixir)是Alan Kay意义上唯一的OO语言,正是因为你说话的原因关于.http://www.infoq.com/interviews/johnson-armstrong-oop (4认同)
  • 谢谢@CodyPoll我没有这个方便的链接. (3认同)