Elixir 案例说明

cjm*_*671 1 elixir

我写了一个声明如下:

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从未设置过。我究竟做错了什么?

Ale*_*kin 5

虽然 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 = ...不是作业,而是重新绑定