Elixir - 同一行上有多个表达式 - 在函数定义中使用 do: 语法时出现编译器错误

2024-02-28

在 Elixir 中,多个表达式可以用分号 (;).

Elixir 在下面的函数定义中抱怨

defmodule Module2 do
    def func([c], n), do: IO.inspect(c); c + n
end

有错误

** (CompileError) hello.exs:2: undefined function c/0
    (stdlib) lists.erl:1352: :lists.mapfoldl/3
    (stdlib) lists.erl:1352: :lists.mapfoldl/3
    (stdlib) lists.erl:1353: :lists.mapfoldl/3

然而,Elixir 对以下语法很满意。

defmodule Module1 do
    def func([c], n) do 
        IO.inspect(c); c + n
    end
end

我不确定为什么其中一种比另一种更有效——据我了解,两种风格的函数定义是等效的。


完整代码如下供参考

defmodule Module1 do
    def func([c], n) do 
        IO.inspect(c); c + n
    end
end
defmodule Module2 do
    def func([c], n), do: IO.inspect(c); c + n
end

Module1.func('r', 13)
Module2.func('r', 13)

如果您确实必须这样做,则需要使用括号:

defmodule Module2 do
  def func([c], n), do: (IO.inspect(c); c + n)
end

原来的问题是优先级;vs 函数/宏调用,因此它的解析如下:

defmodule Module2 do
  (def func([c], n), do: IO.inspect(c)); c + n
end

您可以验证这是否给出了与您提到的完全相同的错误 - 编译器自然会抱怨,因为您正在尝试使用c在函数的上下文之外。

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

Elixir - 同一行上有多个表达式 - 在函数定义中使用 do: 语法时出现编译器错误 的相关文章

随机推荐

  • 如何获取 solr 术语频率?

    我有一个问题 如何才能像我们通过以下方法在 lucene 中获得术语频率一样 DocFreq new Term 字段 值 使用 solr solrnet Try 调试查询 打开 http wiki apache org solr SolrR
  • 如何在没有“onLocationChange”方法的情况下知道 GPS 位置

    我想通过单击一个按钮来发送短信 并且在短信中我想发送位置信息 我试过 location locationManager getLastKnownLocation LocationManager NETWORK PROVIDER 但第一次显示
  • 使用 gson 反序列化时将默认值设置为变量

    我正在尝试转换JSON http www json org 到 Java 对象 当一对的某个值是null 应该设置一些默认值 这是我的POJO https en wikipedia org wiki Plain Old Java Objec
  • 在后台下载多个文件(仅限 iOS 7)

    我目前正在开发一个播客应用程序 该应用程序只能在 iOS 7 上运行 并且它具有允许在后台模式下同步和下载最近剧集的功能 所以很清楚同步 我实现了application performFetchWithCompletionHandler方法
  • WCF服务部署-工具

    有一个 WCF 服务正在 IIS 下运行 该服务访问其文件夹中的文件 访问 SQL Server 数据库并将消息写入事件日志 某数据中心部署平台为Windows Server 2008 我开发了这项服务 但我仍然是一个初学者 部署将导致创建
  • Laravel 5.2 类 App\Http\Controllers\AuthController 不存在

    我的整个应用程序是在 Laravel 5 2 中制作的 工作得很好 但是当我尝试通过以下命令获取路由列表时 php artisan 路线 列表 它向我显示以下错误 ReflectionException 类 App Http Control
  • Keras 模型未能减少损失

    我提出一个例子 其中tf keras模型无法从非常简单的数据中学习 我在用着tensorflow gpu 2 0 0 keras 2 3 0和Python 3 7 在文章的最后 我给出了重现我观察到的问题的 Python 代码 Data 样
  • 无法使用 Swift 4 包管理器导入包

    尝试在我的机器上使用 Xcode beta v9 测试 Swift 4 但在将包导入测试项目时遇到问题 启动项目使用swift package init type executable Changed Package swift并添加了 2
  • 如何探索使用 scikit learn 构建的决策树

    我正在使用构建决策树 clf tree DecisionTreeClassifier clf clf fit X train Y train 这一切都很好 但是 我该如何探索决策树呢 例如 如何查找 X train 中的哪些条目出现在特定叶
  • [[ $- = *i* ]] 在 bash 中意味着什么?

    我正在安装液体提示 https github com nojhan liquidprompt并且在文档中他们要求您添加 i source liquidprompt liquidprompt在你的 bashrc 我试图理解该行的第一部分 但这
  • HashMap UUID 还是 String 作为键?

    HashMap
  • 从服务中的 C# 文件加载 SSRS 报告

    我们正在考虑用 SSRS 取代 Crystal 我想知道是否可以在 C 中加载 rdl 或 rdl data 文件并将报告生成到内存流 我见过一些使用的例子本地报告 http msdn microsoft com en us library
  • 2列的快速比较方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 EDIT 对于我的解决方案 请使用类似的东西 For i 1 To tmpRngSrcMax If rngSrc i lt gt rngDes
  • 安装 openssl 生成的 p12 密钥时 Windows 要求输入 p12 密码

    如果我使用 openssl 生成 p12 证书 openssl pkcs12 export in myprivatecert pem nokeys out mycert p12 即使我要求openssl不要导出私钥 为什么windows在安
  • .ebextensions“文件:”部分中的环境变量

    我在 AWS Elastic Beanstalk 的 软件配置 选项卡中定义了一个名为 MY ENVIRONMENT VARIABLE 的环境变量 现在我想在 ebextensions 配置文件的 files 部分使用此环境变量 Resou
  • 如何在 iPhone 上设置按钮背景颜色?

    如何设置按钮的自定义背景颜色 Interface Builder 似乎没有执行此操作的接口 它只能以编程方式使用吗 如果是这样 您能举个例子吗 我读了你的问题require 就像我一样 程序化的设置按钮颜色的方法 这是 UIKit 中的一个
  • .htaccess 无法在 amazon ec2 ubuntu 实例中工作

    我有一台来自亚马逊 ec2 服务的服务器 在 Linux Ubuntu 上运行 Ubuntu Server 13 04 64位 我已经安装了apache php和mysql 我在文档根目录 即 var www 中添加了一个 htaccess
  • Antlr4 - 有使用 ParseTree Walker 的简单示例吗?

    Antlr4 有一个新类 ParseTreeWalker 但我该如何使用它呢 我正在寻找一个最小的工作示例 我的语法文件是 gram g4 我想解析文件 program txt 到目前为止 这是我的代码 这假设 ANTLR 已经运行了我的语
  • Pentaho日期格式问题

    我的输入 Excel 工作表的字段具有两种不同类型的值列 格式为 YYYY MM DD 现在 当我将 Excel 工作表添加到 Pentaho 中时 我得到的列以及数据类型在日期格式列中显示了字符串数据类型 你可以在下面看到 之后 我尝试与
  • Elixir - 同一行上有多个表达式 - 在函数定义中使用 do: 语法时出现编译器错误

    在 Elixir 中 多个表达式可以用分号 Elixir 在下面的函数定义中抱怨 defmodule Module2 do def func c n do IO inspect c c n end 有错误 CompileError hell