我写了一个声明如下:
case length(clicks) do
0 ->
date_list = []
1 ->
date_list = start_date
_ ->
date_list = Interval.new(from: start_date, until: end_date) |> Enum.to_list
end
Run Code Online (Sandbox Code Playgroud)
似乎date_list从未设置过。我究竟做错了什么?
虽然 Denis 的答案在技术上是正确的,但使用Kernel.length/1通常是一种不好的做法,因为它遍历整个 list。
改用直接模式匹配:
date_list =
case clicks do
[] -> []
[_] -> start_date
[_ | _] ->
[from: start_date, until: end_date]
|> Interval.new()
|> Enum.to_list()
end
Run Code Online (Sandbox Code Playgroud)
另请注意,Elixir 指南强制使用原始值启动管道,并始终在调用函数时使用括号。
根据您最初问题中的范围问题,由于Elixir 中没有对变量赋值,而且根本没有变量,编译器不能让 Schro?dinger local date_list。请记住:date_list = ...不是作业,而是重新绑定。