- Elixir 教程
- Elixir - 主页
- Elixir - 概述
- Elixir - 环境
- Elixir - 基本语法
- Elixir - 数据类型
- Elixir - 变量
- Elixir - 操作员
- Elixir - 模式匹配
- Elixir - 决策
- Elixir - 弦乐
- Elixir - 角色列表
- Elixir - 列表和元组
- Elixir - 关键字列表
- Elixir - 地图
- Elixir - 模块
- Elixir - 别名
- Elixir - 功能
- Elixir - 递归
- Elixir - 循环
- Elixir - 可枚举
- Elixir - 流
- Elixir - 结构
- Elixir - 协议
- Elixir - 文件 I/O
- Elixir - 流程
- 长生不老药 - 印记
- Elixir - 领悟
- Elixir - 类型规格
- Elixir - Behave
- Elixir - 错误处理
- Elixir - 宏
- Elixir - 图书馆
- Elixir 有用资源
- Elixir - 快速指南
- Elixir - 有用的资源
- Elixir - 讨论
Elixir - 循环
由于不变性,Elixir 中的循环(与任何函数式编程语言一样)的编写方式与命令式语言不同。例如,在像 C 这样的命令式语言中,您将编写 -
for(i = 0; i < 10; i++) { printf("%d", array[i]); }
在上面给出的示例中,我们正在改变数组和变量i。Elixir 中不可能发生突变。相反,函数式语言依赖于递归:递归地调用函数,直到达到停止递归操作继续的条件为止。在此过程中没有数据发生变异。
现在让我们使用递归编写一个简单的循环,打印 hello n次。
defmodule Loop do def print_multiple_times(msg, n) when n <= 1 do IO.puts msg end def print_multiple_times(msg, n) do IO.puts msg print_multiple_times(msg, n - 1) end end Loop.print_multiple_times("Hello", 10)
当上面的程序运行时,它会产生以下结果 -
Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello
我们利用函数的模式匹配技术和递归来成功实现循环。递归定义很难理解,但将循环转换为递归很容易。
Elixir 为我们提供了Enum 模块。该模块用于大多数迭代循环调用,因为使用它们比尝试找出相同的递归定义要容易得多。我们将在下一章讨论这些内容。仅当您找不到使用该模块的解决方案时,才应使用您自己的递归定义。这些函数经过尾调用优化并且速度相当快。