码迷,mamicode.com
首页 > 其他好文 > 详细

命名函数

时间:2019-09-09 19:22:33      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:函数调用   传递   imp   没有   bsp   函数名   div   基于   命名空间   

函数体是代码块

  代码块do...end是一种表达式的组织方式。

# ./times.exs下
defmodule Times do def doule(n) do n
* 2 end end

 

函数调用与模式匹配

  代码如下:

# ./factorial.exs    计算阶层
defmodule Factorial do
    def of(0), do: 1          #终止条件要写在上面,否则永远都不会被执行到
    def of(n), do: n * of(n - 1)
end

 

哨兵子句

  代码如下:

defmodule Guard do
    def what_is(x) when is_number(x) do
        IO.puts "#{x} is a number"
    end
    def what_is(x) when is_list(x) do
        IO.puts "#{x} is a list"
    end
    def what_is(x) when is_atom(x) do
        IO.puts "#{x} is an atom"
    end
end

  它们由一个或多个when关键字紧接在函数定义后的断言。当执行时,先执行基于参数的匹配,然后评估所有的when断言。

  哨兵子句不支持||和&&

 

默认参数

  定义函数名时,可以用param \\ value 的语句给任意参数指定默认值。

# ./default_param.exs
defmodule Example do
    def func(p1, p2 \\ 2, p3 \\ 3, p4) do
        IO.inspect [p1, p2, p3, p4]
    end
end

Example.func("a", "b")        #=> ["a", 2, 3, "b"]
Example.func("a", "b", "c")    #=> ["a", "b", 3, "c"]   从从左到右匹配
Example.func("a", "b", "c", "d")

 

  有可能会出现以下错误:

def func(p1, p2 \\ 2, p3 \\ 3, p4)

def func(p1, p2)    #传入两个参数时,无法确定调用


def func(p1, p2 \\ 123)  #传入两个参数时,无法确定调用
def func(p1, p2)

  可以添加一个包含默认参数,且只有函数头部分没有函数体的函数,而其余的使用普通函数,那些默认值就会被应用到对此函数的所有调用上

#省略部分内容
def func(p1, p2 \\ 123) def func(p1, p2) when ... def func(p1, p2) ...

 

|>管道运算符

  |>将左边表达式的结果,将其作为第一个参数传递给右边的函数调用

people = DB.find_customers
orders = Orders.for_customers(people)
tax = sales_tax(orders, 2013)
filing = prepare_filing(tax)
#可以写为
filing = DB.find_customers
        |> Orders.for_customers
        |> sales_tax(2013)
        |> prepare_filing

val |> f( a, b ) 等价于 f( val, a, b)

 

模块

  模块为定义的内容提供了命名空间。它可以用来封装命名函数,还可以封装宏、结构体、协议和其他模块

 

模块指令

  其作用域以指令出现处作为起点,直到当前作用域结束

  import

命名函数

标签:函数调用   传递   imp   没有   bsp   函数名   div   基于   命名空间   

原文地址:https://www.cnblogs.com/lr1402585172/p/11493441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!