让我们看一下文档中的示例:
square = fn(x) -> x * x end
list = [1, 2, 3, 4]
Enum.map(list, square)
为什么需要明确地写Enum.map
?为什么它不使用干净和简短的符号map [1, 2, 3, 4], square
?
Elixir 有多种调度和协议,但在我看来,它的使用有点奇怪。
如果您考虑 OOP 中的多态性或 FP 中的多方法/多分派、协议,那么重点是使代码简短明了,并使程序员无需记住方法的来源。
因此,在 OOP 中,它看起来像下面的代码:
list.map(square)
在 FP 多方法中,它看起来像
map(list, square)
在这两种情况下,编译器/解释器都使用参数的类型来确定map
它应该使用什么方法。
为什么 Elixir 不使用相同的方法?为什么它需要编写冗长的代码并将决定函数来自何处的责任放在程序员的肩上?
有时不使用 multi 方法并明确指定它是有意义的,例如HttpServer.start(80)
. 但是对于像each
, get
,等一般方法来说set
,size
在没有明确指定它的来源的情况下使用它似乎要容易得多。
附言
似乎使用 Elixir 中的协议实际上可以做到这一点。我想知道-为什么不使用它?我在 GitHub 上看到的 Elixir 项目中的所有代码都使用冗长的符号,例如ModuleName.fnName
. 不知道为什么会这样。是否不鼓励使用协议,或者过于复杂而无法在日常任务中使用?