- 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 - 类型规范
- Elixir - 行为
- Elixir - 错误处理
- Elixir - 宏
- Elixir - 库
- Elixir 有用资源
- Elixir - 快速指南
- Elixir - 有用资源
- Elixir - 讨论
Elixir - 循环
由于不可变性,Elixir 中的循环(与任何函数式编程语言一样)与命令式语言中的写法不同。例如,在像 C 这样的命令式语言中,你会这样写:
for(i = 0; i < 10; i++) { printf("%d", array[i]); }
在上例中,我们同时修改了数组和变量i。在 Elixir 中这是不可能的。相反,函数式语言依赖于递归:一个函数递归调用自身,直到满足某个条件停止递归。在这个过程中没有数据被修改。
现在让我们用递归写一个简单的循环,打印 n 次 hello。
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 模块。这个模块用于大多数迭代循环调用,因为它比尝试为相同的目的找出递归定义更容易使用。我们将在下一章讨论这些。只有在找不到使用该模块的解决方案时,才应使用您自己的递归定义。这些函数经过尾调用优化,速度很快。
广告