首页 > 解决方案 > 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

似乎date_list从未设置过。我究竟做错了什么?

标签: elixir

解决方案


虽然 Denis 的回答在技术上是正确的,但 usingKernel.length/1通常是一种不好的做法,因为它遍历了整个 list

改用直接模式匹配:

date_list =
  case clicks do
    [] -> []
    [_] -> start_date
    [_ | _] -> 
      [from: start_date, until: end_date] 
      |> Interval.new()
      |> Enum.to_list()
  end

另请注意,Elixir 指南强制以原始值启动管道,并始终在函数调用中使用括号


根据您最初问题中的范围界定问题,由于Elixir中没有分配给变量,而且根本没有变量,编译器不能有 Schrödinger local date_list。请记住:date_list = ...不是分配,而是重新绑定


推荐阅读