julia笔记:函数

 1 函数的定义(两种方法)

function f(x,y)
           x + y
       end
#f (generic function with 1 method)
f(x,y) = x + y
#f(x,y) = x + y

2 匿名函数(两种方法)

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

julia笔记:函数_第1张图片

3 变参参数

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

julia笔记:函数_第2张图片

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
'''

你可能感兴趣的:(Julia,java,前端,javascript)