可以将函数视为程序的子程序。它们接收输入数据,进行计算,然后返回结果。函数体是我们编写表达式来进行计算的地方。函数体的最后一个表达式的值是函数的输出。函数对重新使用表达式很关键。让我们从一个简单的例子开始,我们将构建消息,向Mary、John和世界问好。尝试在IEx中输入:
如果想向Alice和Mike问好,可以复制粘贴消息并替换名称。但是,还可以创建一个函数,让我们更容易向任何对象问好。首先,我们需要确定消息中发生变化的事物。在前面的示例中,可以看到唯一变化的是问候对象的名称。我们可以编写一个将名称与消息分开的表达式,例如:
我们创建了name变量,它表示变化的部分。然后我们使用<>运算符将字符串与name变量连接起来。下面将这些表达式转换为函数:
我们创建了一个函数并将其绑定到一个名为hello的变量。然后我们使用点运算符来调用它,并在括号内传递值。我们可以在参数中使用不同的值来调用该函数。这类函数在Elixir中称为匿名函数,因为它们没有全局名称,必须绑定到一个变量上才能重新使用。匿名函数常用于创建动态函数(它们也被称为lambda,是lambda演算中唯一的函数类型)。
现在让我们一步一步地回顾定义函数的过程:
1.fn表示函数的开头。
2.name是函数的参数。函数的参数是函数内部变量上,它强制任何调用函数的人为它们提供值。调用函数时,我们需要以与参数定义时相同的顺序传递值。
3.->运算符表示以下的表达式将是函数的主体。
4.函数体是表达式"Hello," <> name <> "!"。返回值是最后一个表达式的值。在此示例中,只有一个表达式,因此将返回该表达式的值。(www.xing528.com)
5.end标志着函数定义的结束。
Elixir通过使用元编程为开发人员提供了重新定义语言的一些基本函数和块的能力。但是,fn和end的组合是Elixir的特殊形式。特殊形式是不能由开发人员覆写的基本构建块,无论你在应用程序中使用哪个框架或库,它们都将以相同的方式工作。可以查看Elixir文档了解更详细的信息。[4]
您可以使用Elixir的表达字符串插值语法替换<>运算符:#{}将括号内的所有表达式都强制转换为字符串。下面是一个例子:
我们通常使用匿名函数进行简单操作,其中大多数都是一行。但是,我们可以创建多行,只需在->运算符后断行:
我们也可以创建没有参数的函数,只需要省略参数。
还可以创建具有多个参数的函数,这些参数用逗号分隔。
用逗号分隔参数price和quantity。Elixir函数参数数量的上限是255个,这对绝大多数程序已经足够了。但最好将参数数量控制在5个以下。更多的参数可以用数据结构(元组、列表、映射表)表示,还可以将函数拆分为较小的函数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。