【发布时间】:2016-03-20 21:01:55
【问题描述】:
我正在学习 Elixir,有点困惑为什么我们必须使用同一函数的多个定义而不是使用 case 语句进行分支。这是Elixir in Action,第一版第 81 页中的一个示例,用于计算文件中的行数:
defmodule LinesCounter do
def count(path) do
File.read(path)
|> lines_num
end
defp lines_num({:ok, contents}) do
contents
|> String.split("\n")
|> length
end
defp lines_num({:error, _}), do: "error"
end
所以我们有两个 defplines_num 实例来处理 :ok 和 :error 的情况。但是以下不是做同样的事情吗?可以说是用一种更简洁、更简洁的方式,并且只使用一个函数而不是三个函数?
defmodule LinesCounterCase do
def count(file) do
case File.read(file) do
{:ok, contents} -> contents |> String.split("\n") |> length
{:error, _} -> "error"
end
end
end
两者的工作方式相同。
我不想在开始使用 Elixir 的旅程时学习不正确的习语,因此我正在寻找以这种方式使用 case 语句的缺点。
【问题讨论】:
-
我也更喜欢案例版 ;-)
标签: elixir