Elixir 长生不老药案例陈述

Elixir 长生不老药案例陈述,elixir,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 似乎日期列表从未设置过。我做错了什么?您在cas

我写了一份声明如下:

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

似乎日期列表从未设置过。我做错了什么?

您在case语句中分配内部变量。按如下方式从外部分配变量:

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

您正在case语句中分配内部变量。按如下方式从外部分配变量:

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

虽然丹尼斯的答案在技术上是正确的,但使用通常是一种不好的做法,因为它贯穿了整个列表

改用直接模式匹配:

date_list =
  case clicks do
    [] -> []
    [_] -> start_date
    [_ | _] -> 
      [from: start_date, until: end_date] 
      |> Interval.new()
      |> Enum.to_list()
  end
还请注意,Elixir指南强制以原始值启动管道,并且在调用函数时始终使用括号


根据您最初问题中的范围界定问题,由于Elixir中没有变量赋值,而且根本没有变量,编译器不能有Schrỏdinger本地日期列表。记住:日期列表=。。。这不是作业,而是重新绑定。

虽然丹尼斯的答案在技术上是正确的,但使用通常是一种不好的做法,因为它会遍历整个列表

改用直接模式匹配:

date_list =
  case clicks do
    [] -> []
    [_] -> start_date
    [_ | _] -> 
      [from: start_date, until: end_date] 
      |> Interval.new()
      |> Enum.to_list()
  end
还请注意,Elixir指南强制以原始值启动管道,并且在调用函数时始终使用括号


根据您最初问题中的范围界定问题,由于Elixir中没有变量赋值,而且根本没有变量,编译器不能有Schrỏdinger本地日期列表。记住:日期列表=。。。这不是一项任务,而是重新绑定。

我很好奇,最近所有与日期相关的问题,你到底想实现什么。我正在建立一个内部工具来重定向和跟踪流量,用图表来显示流量!数据来自Postgres,你需要在稀疏的日子里加上零,以便用JS实际绘制图形;我真的把整个事情当作一个练习来发展我的长生不老药技能。在做了很多Python之后,老实说Elixir是我有幸使用过的最漂亮的语言之一。我很好奇你最近在所有与日期相关的问题上到底想实现什么。我正在建立一个内部工具来重定向和跟踪流量,用图表来显示流量!数据来自Postgres,你需要在稀疏的日子里加上零,以便用JS实际绘制图形;我真的把整个事情当作一个练习来发展我的长生不老药技能。在使用了大量Python之后,老实说Elixir是我有幸使用过的最漂亮的语言之一。出于某种原因,我认为列表的长度应该缓存在某个地方,这是关于Kernel.length/1的一个有趣的观察结果。出于某种原因,我认为列表的长度应该缓存在某个地方。