章节目录

(译)Études for Elixir Chapter 2: 函数和模块
(译)Études for Elixir Chapter 3: 原子,元组和模式匹配

Étude 2-1: 编写一个函数

编写包含一个函数的模块, 该函数以一个矩形的长度和宽度作为参数并返回面积. 模块名称名为Geom, 函数命名为area. 保存为文件geom.ex. 函数有两个参数.

defmodule Geom do
  def area(length, width) do
    length * width
  end
end
iex(1)> c("geom.ex")
[Geom]
iex(2)> Geom.area(3,4)
12
iex(3)> Geom.area(12, 7)
84

Étude 2-2: 编写一个有默认值的函数

修改函数, 添加参数的默认值

defmodule Geom do  
  def area(length \\ 1, width \\ 1) do
    length * width
  end
end

调用函数

iex(1)> c("geom.ex")
[Geom]
iex(2)> Geom.area(7, 5)
35
iex(3)> Geom.area(7)
7
iex(4)> Geom.area()
1

Étude 2-3: 编写模块文档

defmodule Geom do
  @moduledoc """
  Functions for calculating areas of geometric shapes.

  from *Études for Elixir*, O'Reilly Media, Inc., 2013.
  Copyright 2013 by J. David Eisenberg.
  """
  @vsn 0.1

  @doc """
  Calculates the area of a rectangle, given the length and width.
  Returns the product of its arguments. The default value for
  both arguments is 1.
  """

  @spec area(number(), number()) :: number()

  def area(length \\ 1, width \\ 1) do
    length * width
  end
end

Étude 2-4: Discovery Étude

如果默认值不在函数定义的参数列表最后会发生什么, 试试下面的代码, 并执行.

defmodule Test do
  def sum( a \\ 3, b, c \\ 7) do
    a + b + c
  end
end
Test.sum(11, 22, 33)
Test.sum(11, 22)
Test.sum(11)

developerworks
1.7k 声望266 粉丝