- 教程
- 概述
- 环境
- Basic 语法
- 数据类型
- 变量
- 运算符
- 模式匹配( Pattern Matching)
- 决策( Decision Making)
- Strings( Strings)
- Char Lists( Char Lists)
- 列表和元组( Lists and Tuples)
- 关键字列表( Keyword Lists)
- Maps
- 模块( Modules)
- 别名( Aliases)
- 功能( Functions)
- 递归
- 循环
- Enumerables( Enumerables)
- Streams( Streams)
- Structs( Structs)
- 协议 Protocols
- File I/O
- 进程( Processes)
- Sigils( Sigils)
- 理解( Comprehensions)
- Typespecs( Typespecs)
- 行为( Behaviours)
- 错误处理( Errors Handling)
- Macros( Macros)
- (库)Libraries
- 有用的资源
- 讨论
- Show 例子
- Show 例子
- Show 例子
- Show 例子
- Show 例子
- if statement
- if..else statement
- unless statement
- unless..else statement
- cond
- case
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
循环
由于不变性,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 module 。 此模块用于大多数迭代循环调用,因为使用它们比尝试计算相同的递归定义要容易得多。 我们将在下一章讨论这些内容。 只有当您找不到使用该模块的解决方案时,才应使用您自己的递归定义。 这些函数是尾调用优化的并且非常快。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论