Julia之初体验(十一)函数2

具有特殊名称的运算符
一些特殊的表达式对应于具有非显而易见名称的函数的调用。

Expression Calls
[A B C ...] hcat
[A; B; C; ...] vcat
[A B; C D; ...] hvcat
A' adjoint
A[i] getindex
A[i] = x setindex!
A.n getproperty
A.n = x setproperty!

匿名函数
Julia中的函数是一类对象:可以将它们分配给变量,并使用已分配给变量的标准函数调用语法对其进行调用。 它们可以用作参数,也可以作为值返回。 也可以使用以下两种语法之一匿名创建它们,而无需给出名称:

julia> x -> x^2 + 2x - 1
#1 (generic function with 1 method)

julia> function (x)
           x^2 + 2x - 1
       end
#3 (generic function with 1 method)

julia> map(round, [1.2,3.5,1.7])
3-element Array{Float64,1}:
 1.0
 4.0
 2.0

这将创建一个函数,该函数接受一个参数x并以该值返回多项式x ^ 2 + 2x-1的值。 请注意,结果是一个通用函数,但具有基于连续编号的编译器生成的名称。
匿名函数的主要用途是将其传递给以其他函数为参数的函数。 一个经典的例子是map,它将一个函数应用于数组的每个值,并返回一个包含结果值的新数组。

julia>x=[2,3,8]
    print(map(x-> (x^2 + 2*x - 1),x))

[7, 14, 79]


julia> map(x -> x^2 + 2x - 1, [1,3,-1])
3-element Array{Int64,1}:
  2
 14
 -2

可以使用(x,y,z)-> 2x + y-z语法编写接受多个参数的匿名函数。 零参数匿名函数写为()-> 3。 没有参数的函数的概念可能看起来很奇怪,但对于“延迟”计算很有用。 在这种用法中,代码块包装在零参数函数中,该函数随后通过将其调用为f来调用。
例如,考虑此调用get以获取: 

get(dict, key) do
    # default value calculated here
    time()
end

#这两句的意思是:在dict中找 key 的值,如果没有找到就 do 下面的语句time()并返回。


dict=Dict("a"=>2,"b"=>3)

get(dict,"a") do
    time()
end

#结果是 2


get(dict,"c") do
    time()
end

#结果是:1.591601437991e9  当前时间

上面的代码等效于使用包含在do和end之间的代码的匿名函数调用get,如下所示:

get(()->time(), dict, key)

 

 

 

 

 

 

 

 

你可能感兴趣的:(Julia)