📝 Elixir教程

34篇技术文档
  Elixir-别名

📅  最后修改于: 2020-11-04 05:28:31        🧑  作者: Mango

为了促进软件重用,Elixir提供了三个指令-别名,require和import。它还提供了一个称为use的宏,其摘要如下-现在让我们详细了解每个指令。别名使用别名指令,可以为任何给定的模块名称设置别名。例如,如果要为String模块赋予别名“ Str”,则只需编写-现场演示上面的程序产生以下结果-别名是考虑到字符串模块海峡。现在,当我们使用Str字面量调用任何函数时,它实际上是引用String模...

  Elixir-函数

📅  最后修改于: 2020-11-04 05:29:06        🧑  作者: Mango

函数是一起组织以执行特定任务的一组语句。编程中的函数工作原理与Math中的函数相似。给函数一些输入,它们根据提供的输入生成输出。Elixir中有2种功能-匿名函数使用fn..end构造定义的函数是匿名函数。这些功能有时也称为lambda。通过将它们分配给变量名称来使用它们。命名函数使用def关键字定义的函数称为函数。这些是Elixir中提供的本机函数。匿名函数顾名思义,匿名函数没有名称。这些经常传...

  Elixir-递归

📅  最后修改于: 2020-11-04 05:29:26        🧑  作者: Mango

递归是一种方法,其中问题的解决方案取决于相同问题的较小实例的解决方案。大多数计算机编程语言都通过允许函数在程序文本中调用自身来支持递归。理想情况下,递归函数具有结束条件。这种结束条件(也称为基本情况)停止重新输入该函数并将函数调用添加到堆栈中。这是递归函数调用停止的地方。让我们考虑以下示例,以进一步了解递归函数。现场演示当上述程序运行时,它产生以下结果-因此,在上述函数Math.fact中,我们正...

  Elixir-循环

📅  最后修改于: 2020-11-04 05:29:51        🧑  作者: Mango

由于不可变性,Elixir中的循环(与任何功能性编程语言一样)与命令性语言的编写方式不同。例如,使用C这样的命令式语言,您将编写-在上面给出的示例中,我们同时对数组和变量i进行了变异。在Elixir中无法进行突变。相反,函数式语言依赖于递归:递归地调用函数,直到达到阻止递归操作继续进行的条件为止。在此过程中,没有数据发生突变。现在,让我们使用递归编写一个简单的循环,该循环可打印n次问候。现场演示运...

  Elixir-可枚举

📅  最后修改于: 2020-11-04 05:30:26        🧑  作者: Mango

可枚举是可以枚举的对象。 “枚举”是指将集合/集合/类别的成员一个个地计数(通常是按顺序,通常是按名称)。Elixir提供了可枚举的概念以及与之配合使用的Enum模块。顾名思义,Enum模块中的功能仅限于枚举数据结构中的值。可枚举数据结构的示例是列表,元组,映射等。Enum模块为我们提供了100多个处理枚举的函数。我们将在本章中讨论一些重要的功能。所有这些功能都将枚举作为第一个元素,将函数作为第二...

  Elixir-流

📅  最后修改于: 2020-11-04 05:30:52        🧑  作者: Mango

许多函数都要求可枚举并返回列表。这意味着,在对Enum执行多个操作的同时,每个操作都将生成一个中间列表,直到我们得到结果为止。流支持惰性操作,而不是枚举的急切操作。简而言之,流是惰性的,可组合的枚举。这意味着除非绝对需要,否则Streams不会执行操作。让我们考虑一个例子来理解这一点-现场演示运行上述程序时,将产生以下结果-在上面给出的示例中,1..100_000 |> Stream.map(&(...

  Elixir-结构

📅  最后修改于: 2020-11-04 05:31:11        🧑  作者: Mango

结构是在映射之上构建的扩展,提供了编译时检查和默认值。定义结构为了定义一个结构,使用defstruct结构-与defstruct一起使用的关键字列表定义了该结构将具有的字段及其默认值。结构采用它们在其中定义的模块的名称。在上面给出的示例中,我们定义了一个名为User的结构。现在,我们可以使用类似于创建地图的语法来创建User结构-上面的代码将生成三个具有值的不同结构-结构提供编译时保证,只有通过d...

  Elixir-协议

📅  最后修改于: 2020-11-04 05:31:31        🧑  作者: Mango

协议是在Elixir中实现多态的机制。只要协议实现协议,就可以对任何数据类型进行调度。让我们考虑一个使用协议的例子。在前面的章节中,我们使用了一个名为to_string的函数将其他类型转换为字符串类型。这实际上是一个协议。它根据给出的输入进行操作而不会产生错误。似乎我们正在讨论模式匹配功能,但是随着我们进一步进行,结果却有所不同。考虑以下示例,以进一步了解协议机制。让我们创建一个协议,该协议将在给...

  Elixir-文件IO

📅  最后修改于: 2020-11-04 05:32:09        🧑  作者: Mango

文件IO是任何编程语言的组成部分,因为它允许该语言与文件系统上的文件进行交互。在本章中,我们将讨论两个模块-路径和文件。路径模块路径模块是一个非常小的模块,可以视为文件系统操作的帮助程序模块。 File模块中的大多数功能都将路径作为参数。最常见的是,这些路径将是常规二进制文件。路径模块提供了使用此类路径的工具。首选使用来自Path模块的功能,而不是仅操作二进制文件,因为Path模块透明地处理不同的...

  Elixir-流程

📅  最后修改于: 2020-11-04 05:32:47        🧑  作者: Mango

在Elixir中,所有代码都在进程内部运行。进程彼此隔离,并发运行,并通过消息传递进行通信。 Elixir的进程不应与操作系统进程混淆。 Elixir中的进程在内存和CPU方面极其轻巧(与许多其他编程语言中的线程不同)。因此,同时运行成千上万个进程的情况并不少见。在本章中,我们将学习产生新进程以及在不同进程之间发送和接收消息的基本构造。生成函数创建新进程的最简单方法是使用spawn函数。衍生工具接...

  Elixir-正则表达式

📅  最后修改于: 2020-11-04 05:33:19        🧑  作者: Mango

在本章中,我们将探索信号,即语言提供的用于处理文本表示的机制。标记以波浪号(〜)字符开头,后跟字母(标识标记),然后是定界符;可选地,可以在最终定界符之后添加修饰符。正则表达式Elixir中的正则表达式是Sigils。我们已经在字符串一章中看到了它们的用法。让我们再举一个例子,看看如何在Elixir中使用正则表达式。现场演示运行上述程序时,将产生以下结果-印记支持8种不同的定界符-支持不同定界符的...

  Elixir-理解

📅  最后修改于: 2020-11-04 05:33:40        🧑  作者: Mango

列表理解是用于遍历Elixir中的可枚举的语法糖。在本章中,我们将使用理解来进行迭代和生成。基本当我们在“可枚举”一章中查看Enum模块时,我们遇到了map函数。在此示例中,我们将传递一个函数作为第二个参数。范围中的每个项目都将传递到函数,然后将返回一个包含新值的新列表。映射,过滤和转换是Elixir中非常常见的操作,因此与上一个示例获得相同结果的方式略有不同-当我们运行上面的代码时,它产生以下结...

  Elixir-类型规格

📅  最后修改于: 2020-11-04 05:33:59        🧑  作者: Mango

Elixir是一种动态类型化的语言,因此Elixir中的所有类型均由运行时推断。尽管如此,Elixir带有typespec,这是用于声明自定义数据类型和声明类型化的函数签名(规范)的一种表示法。功能规格(规格)默认情况下,Elixir提供一些基本类型,例如整数或pid,以及复杂类型:例如,round函数将一个float舍入为最接近的整数,并使用数字作为参数(整数或float),并且返回一个整数。在...

  Elixir-行为

📅  最后修改于: 2020-11-04 05:34:17        🧑  作者: Mango

Elixir(和Erlang)中的行为是一种将组件的通用部分(变为行为模块)与特定部分(变为回调模块)分离和抽象的方法。行为提供了一种方法-定义一组必须由模块实现的功能。确保模块实现该集中的所有功能。如果需要的话,您可以想到行为,例如面向对象的语言(如Java)中的接口:模块必须实现的一组函数签名。定义行为让我们考虑一个示例来创建我们自己的行为,然后使用这种通用行为来创建模块。我们将定义一种以不同...

  Elixir-错误处理

📅  最后修改于: 2020-11-04 05:34:48        🧑  作者: Mango

Elixir具有三种错误机制:错误,抛出和退出。让我们详细探讨每种机制。错误当代码中发生异常情况时,将使用错误(或异常)。可以通过尝试将数字添加到字符串来检索示例错误-当上述程序运行时,会产生以下错误-这是一个示例内置错误。引发错误我们可以使用raise函数引发错误。让我们考虑一个例子来理解相同-可以通过raise / 2传递错误名称和关键字参数列表来引发其他错误您还可以定义自己的错误并提出这些错...