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
似乎date_list
从未设置过。我究竟做错了什么?
解决方案
虽然 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 = ...
不是分配,而是重新绑定。
推荐阅读
- typescript - 有没有一种更简洁的方法来对嵌套对象属性类型进行类型转换?
- typescript - TypeScript Array 通用丢失顺序
- c# - 如何重置我的 Umbraco CMS 管理员密码?
- mysql - 错误代码:1064 - 您的 SQL 语法有错误
- swift - Swift / 用户隐私位置始终使用
- java - 尝试连接到 Azure Eventhub 时出错:AzureTokenCredentials / IllegalArgumentException: name
- javascript - 为什么我的对象内的箭头函数不起作用?
- android - 如何在 android xml 的组件/视图中添加 2 种样式
- azure-data-lake - 如何使用 python 脚本将 csv 文件从 GitHub 上传到 azure 数据湖
- mongodb - 使用 Nifi 查询 MongoDB