1 函数的定义(两种方法)
function f(x,y)
           x + y
       end
#f (generic function with 1 method)f(x,y) = x + y
#f(x,y) = x + y2 匿名函数(两种方法)
function (x,y)
           x + y
       end
##3 (generic function with 1 method)(x,y)->x + y
##5 (generic function with 1 method)2.1 匿名函数应用:map

3 变参参数
- “参数数量可变”的简称
- 通过在最后一个参数后增加省略号来定义一个变参函数

4 函数参数中的do结构
- 把函数作为参数传递给其他函数是一种强大的技术,但它的语法并不总是很方便
- 当函数参数占据多行时,这样的调用便特别难以编写
比如,考虑在具有多种情况的函数上调用map
map(x->begin
           if x < 0 && iseven(x)
               return 0
           elseif x == 0
               return 1
           else
               return x
           end
       end,
    [1,0,-1])
'''
3-element Vector{Int64}:
  1
  1
 -1
'''当然可以先定义函数f,然后将f送入map中
function f(x)
       begin
           if x < 0 && iseven(x)
               return 0
           elseif x == 0
               return 1
           else
               return x
           end
       end
end
map(f,[1,0,-1])
'''
3-element Vector{Int64}:
  1
  1
 -1
'''还有一种方法是使用保留字do
do x 语法创建一个带有参数 x 的匿名函数,并将其作为第一个参数传递给 map
map([1,0,-1]) do x
    if x < 0 && iseven(x)
               return 0
    elseif x == 0
               return 1
    else
               return x
    end
end
'''
3-element Vector{Int64}:
  1
  1
 -1
'''4.1 do函数与文件写入
open("outfile", "w") do io
    write(io, data)
end- do io是一个使用- do语法的块结构。这里,文件被打开并传递给后面的代码块,该代码块可以使用变量- io来引用这个打开的文件。
- 使用 do语法的好处是,代码块结束时,文件会自动关闭,这意味着你不需要显式地调用close(io)。
5 管道链式调用
把一个函数作用到前一个函数的输出上

5.1 和广播链式使用
["a", "list", "of", "strings"] .|> uppercase
'''
4-element Vector{String}:
 "A"
 "LIST"
 "OF"
 "STRINGS"
'''
["a", "list", "of", "strings"] .|> uppercase .|>reverse
'''
4-element Vector{String}:
 "A"
 "TSIL"
 "FO"
 "SGNIRTS"
'''["a", "list", "of", "strings"] .|> [uppercase, reverse, titlecase, length]
'''
4-element Vector{Any}:
  "A"
  "tsil"
  "Of"
 7
'''


















