具有多个子句的命名函数的 Elixir 默认参数

2023-11-27

我无法理解默认参数如何与命名函数中的多个子句交互。归根结底,为什么下面的代码片段有效?

defmodule Lists do

  def sum([], total \\ 0), do: total
  def sum([h|t], total), do: h + sum(t, total)

end

根据我的理解,编译器将其扩展为:

defmodule Lists do

  def sum([]), do: sum([], 0)
  def sum([], total), do: total
  def sum([h|t], total), do: h + sum(t, total)

end

所以我预计会发生以下情况:

iex(1)> Lists.sum [1,2,3,4]
** (FunctionClauseError) no function clause matching in Lists.sum/1

相反,它有效:

iex(1)> Lists.sum [1,2,3,4]
10

Using 长生不老药 0.12.4.


实际上,def sum([], total \\ 0), do: total将定义一个函数子句,如下所示def sum(list), do: sum(list, 0)。所以我绝对能看到你的困惑。我保证我们会在未来的版本中针对此类情况发出警告。谢谢你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有多个子句的命名函数的 Elixir 默认参数 的相关文章

  • 使用 hmac 在 Elixir 和 PHP 中生成签名

    我尝试使用 Elixir 生成签名 它的值与 PHP 相同 例如 PHP 中的代码是 signature base64 encode hash hmac sha256 abc def 输出将是 Mzk3ZjQ2NzM0MWU0ZDc4YzQ
  • 使用 Ecto 的原始 SQL

    我对 Elixir 和 Phoenix Framework 的世界还很陌生 我正在尝试遵循 TheFireHoseProject 教程 但在使用 Ecto 查询原始 SQL 时遇到问题 该教程说这应该有效 defmodule Queries
  • Elixir Phoenix 生产服务器出现 Letscrypt 续订问题

    我有一个使用 Elixir Phoenix 框架构建的网站 该网站在开发和生产模式下都运行良好 当phoenix服务器在开发模式下运行时 我更新Let s Encrypt证书没有问题 但是当完全一样应用程序正在生产模式下运行 尝试更新时我不
  • 使用 ECTO 和 put_assoc/4 进行多对多

    我尝试将 2 个现有多对多记录与 ECTO 和 put assoc 4 关联 但在尝试更新时不会删除元素 基本上我有项目和用户 为了管理用户对项目的访问 我有表 user project def Project do schema proj
  • 如何使用 Erlang/OTP 25 编译器重新编译 rebar3?运行灵药 1.13.4

    我正在关注免费的截屏视频 教程凤凰城 LiveView 启动器 https online pragmaticstudio com courses liveview starter modules 2但我什至无法开始 因为mix setup失
  • 函数的未命名参数可以有默认值吗?

    以下代码在 C 中合法吗 void f void 0 int main f C 标准的哪一页声明这种用法是合法的 是的 这是合法的 没有标准的措辞来具体允许这种功能组合 根本没有任何可以disallow它 要么 默认参数语法适用于 a 中的
  • 映射到 MySql BIGINT 的 Ecto 或 Elixir 数据类型

    我是 Elixir 和 Phoenix 的新手 学习 6 个月 我有一种情况 我想将 Ecto 模型的字段 不是主键或表 ID 分配给 MySql 中的 BIGINT 我意识到当你创建一个 Ecto 模型时 MySql 表中该模型的 ID
  • 为什么我收到#Ecto.Association.NotLoaded?

    我有团队 每个团队都有用户 因此有一个连接表将用户链接到团队 因为它是多对多关系 这是我的模型 defmodule App Team do use App Web model schema teams do field owner id i
  • 如何测试 Phoenix 套接字是否已终止?

    我正在寻找一种方法来测试套接字是否被终止 被测试的代码执行以下操作 def handle in logout payload socket do stop logout socket gt assign user nil end 和我的测试
  • 基于结构类型更改的分块列表

    我有一个列表 我想根据从结构类型 B 到 A 的转换来分块 例如 我有以下内容 iex 1 gt defmodule A do defstruct module A iex 2 gt defmodule B do defstruct mod
  • javaScript 函数 - 为什么我的默认参数失败?

    我的 Javascript 函数导致我的控制台返回我 类型错误 样式为空 这里是片段 let style one 1 two 2 three 3 function styling style style ruleSetStock retur
  • 如何将 Elixir 库加载到 iex 中而不将其添加到项目的 mix.exs deps 中?

    我想尝试 Poison json 模块而不创建混合项目 如何安装它并通过导入使其在 iex 中可用 我已经能够将它添加到项目中 然后在进入项目目录并使用 iex S mix 后使用它 tbrowne LILJEN code elixirTr
  • Ecto 构建多个关联

    目前正在使用 Ecto Postgres 从事 Phoenix 项目 创建评论时 作为评论belongs to用户和文章 有没有一种方法可以构建多个关联来生成一个变更集 像这样的伪代码 comment changeset build ass
  • Elixir / Erlang Dialyzer:为什么行为回调的参数类型应该是子类型而不是超类型?

    我有一个行为 X 和一个参数类型的回调函数 a any 模块 Y 实现行为 X 实现模块 Y 中的回调函数具有参数类型 a any b any Dialyzer 不喜欢这样并抱怨 a b gt is not a supertype of a
  • “!”、“?”、“_”和“.”是什么意思? Elixir 中的语法

    我需要帮助理解 Elixir 中的以下语法 and 这些语法在 Elixir 的功能中起什么作用 例如Repo get 我不确定它们是否只是函数名称 或者有一个角色 虽然我知道 用于调用匿名函数 和 对于任何或可变的 失败时引发异常的函数约
  • Phoenix:订购查询集

    我 一个菜鸟 为了好玩而玩弄 Phoenix 框架并构建一个小型 Twitter 克隆 我一切正常 但是 我想按updated at字段 升序 正如您从 tweet controller 中看到的 我尝试过使用 order by 子句 但这
  • 打造 ecto 独一无二的领域

    如何制作一个字段unique在体外 我以为它和Ruby中的活动记录一样 但似乎不是 你想使用唯一约束 3 http hexdocs pm ecto Ecto Changeset html unique constraint 3 这与 Act
  • 如何在phoenix中使用session连接?

    我有一个身份验证插头 我想测试我的控制器 问题是这个插头里的线有 user id get session conn user id 当我使用这种方法时它总是为零 我以前使用过dirty hack 但我不再想这样做 session Plug
  • Phoenix 中的 web/static 和 priv/static 有什么区别?

    我对长生不老药和凤凰是新手 现在我在凤凰城的静态资产方面遇到了麻烦 我想在我的页面中添加一个js文件 我在我的模板中添加以下代码 js test js gt gt 然后创建一个js文件web static js test js 但是 我收到
  • 创建新的保护子句

    在 Elixir 中 我将如何为函数创建新的保护子句 显然 我已经看到你不能只调用 a 中的任何函数when声明 但如果能够做这样的事情那就太好了 defmodule Player do def play card player do de

随机推荐

  • iPhone:通过本地通知增加应用程序徽章

    当应用程序未运行时 是否可以通过本地通知增加应用程序徽章 我知道如何设置徽章 但还没有找到任何方法来增加这个值 localNotification applicationIconBadgeNumber 23 Update 我找到了一个 远非
  • Oracle SQL 获取第 n 个元素正则表达式

    我正在尝试使用 Oracle 中的 SQL 获取逗号分隔字符串中的第 n 个元素 到目前为止我有以下 SELECT regexp substr 100016154 5101884LT00001 10000001089210000001265
  • WCF 自定义 Http 代理身份验证

    是否可以为 WCF 提供自定义代理地址和自定义凭据 我在 stackoverflow 上找到了这个答案 如何使用生成的 WCF 客户端的凭据设置代理 但我遇到了一个复杂的问题 我要进行身份验证的服务使用自己的身份验证 因此我必须使用两组凭据
  • Azure Ad b2c:通过邀请添加新成员用户

    我有一个Azure 广告 B2C在 Azure 上运行 我想在 B2C 中创建带有邀请的用户 我尝试创建来宾用户 但该用户无法登录 因为该用户是作为 B2B 用户创建的 我也尝试过手动添加用户 但我无法添加自己的域 例如 电子邮件受保护 但
  • Json.net 反序列化具有非字符串键类型的嵌套字典

    我正在使用 Json NET 反序列化一个对象 其中包含具有自定义 非字符串 键类型的嵌套字典 这是我正在尝试做的事情的示例 public interface IInterface String Name get set public cl
  • javascript - 比较不同格式的日期

    我有两个日期 我需要比较它们 看看其中一个是否大于另一个 但它们的格式不同 我不确定比较两个日期的最佳方法 格式为 1381308375118 这是 var futureDate 这是由创建的 var today new Date toda
  • 如何从自定义按钮调用数据表 csv 按钮

    需要从我的自定义按钮调用 csv 按钮
  • 网络音频启动和停止振荡器然后再次启动

    我正在尝试启动和停止声音 那行得通 但我无法再次启动声音 我真的需要再次制作另一个振荡器吗 这看起来非常不直观 一定会有更好的办法 这就是我所拥有的一切 oscillator1 noteOn 0 oscillator1 noteOff 0
  • PHPSESSID 未保存到 cookie

    保存会话 ID 的 PHPSESSID 变量未保存到客户端 cookie 中 这会导致每次我调用时都会生成一个新的会话 IDsession start 功能 当我使用 FireFox Opera 和 Chrome 时 情况就是如此 对于 s
  • 将JSON数据插入到android中的SQLite数据库中

    我想将 JSON 数组中的数据插入到 SQLite 数据库中 我创建了两个类 CategoryHelper java 和 AndroidJSONParsingActivity java 来获取 java 响应 当我运行代码时出现异常data
  • 如何将 boost::serialize 转换为 sqlite::blob?

    我正在从事一个科学项目 需要多种程序能力 在寻找可用的工具后 我决定使用 Boost 库 它为我提供了 C 标准库未提供的所需功能 例如日期 时间管理等 我的项目是一组命令行 它处理来自旧的 自制的 基于纯文本文件的数据库的大量数据 导入
  • 3d numpy 数组的众数/中值/平均值

    我有一个 3d numpy 数组 我的目标是获取它的平均值 众数 中位数 它的形状为 500 300 3 我想得到例如 430 232 22 作为模式 有没有办法做到这一点 标准 np mean array 给了我一个非常大的数组 我不知道
  • Java 监听器必须继承自 java.util.EventListener - 为什么?

    在javadoc中它说EventListener是 所有事件侦听器接口都必须扩展的标记接口 这是为什么 让自定义监听器实现EventListener有什么意义 是否有对 EventListener 进行特殊处理的地方 可能被使用过javab
  • PHP 可调用对象作为对象成员

    我有课Logger其中 除其他外 还有一个方法Log As Log最常见的用途是Logger例如 我已经有线 invoke打电话Log 另一个类 Site 包含一个成员 Log 它是 Logger 的一个实例 为什么这会起作用 Log th
  • 如何在 jquery 插件中对私有方法进行单元测试?

    也许这是一个有点新手的 JQuery 问题 但是 正确的 jquery 插件是写在闭包内的 因此只有定义插件接口的方法才能从外部访问 有时 或很多时候 人们可能需要辅助方法 而将其作为插件接口的一部分公开是没有意义的 例如 因为它们会改变内
  • 如何从 Go 上的请求正文中获取 JSON

    我是 Go 的新手 但到目前为止我非常喜欢它 我有一个问题我无法弄清楚 我正在将 API 从 Node 迁移到 Go 并且有一个日志 我必须在其中捕获 POST 的正文AS IT IS并将其保存到jsonb在 Postgresql 数据库中
  • Delphi 中嵌入 DB 的全文搜索

    我们正在创建一个开源推特客户端并正在寻找一个嵌入式数据库尽可能最小的占地面积与 Delphi 配合使用并且非常适合全文搜索 我知道这不太适合小足迹 理想情况下 它也应该是免费或开源的 我知道这要求很高 我倾向于SQLite 但我以前没有使用
  • 自定义键盘快捷键

    I want my app to support keyboard shortcuts Many devices such as Asus Transformer have external keyboard which has Ctrl
  • 如何在一张图中绘制多个季节性分解图?

    我正在使用以下提供的季节性分解来分解多个时间序列statsmodels 这是代码和相应的输出 def seasonal decompose item index tmp df2 loc df2 item id copy item ids i
  • 具有多个子句的命名函数的 Elixir 默认参数

    我无法理解默认参数如何与命名函数中的多个子句交互 归根结底 为什么下面的代码片段有效 defmodule Lists do def sum total 0 do total def sum h t total do h sum t tota