Julia 函数
阐述
函数接受一定的输入并返回一定的输出。一个函数可以包括多个不同的 Julia 方法。可以用块形式和赋值形式定义。函数调用为传地址调用。
函数在第一个方法被定义时创建,或者也可以定义一个不包含任何方法的函数:
function emptyfunc end
每个在顶层定义的函数都有与之对应的一个 Julia 单例类型,且这个类型是 Function
的子类型。但是匿名函数不一定是单例类型。
函数类型的单例化使得高阶函数可以轻易地对作为参数的函数特化,编译出高效的代码。
julia> foo41(x) = x + 1
foo41 (generic function with 1 method)
julia> typeof(foo41)
typeof(foo41) (singleton type of function foo41, subtype of Function)
参数
函子
任何 Julia 对象都可以通过添加调用方法的方式来让它变得可以调用。
julia> struct Polynomial{R}
coeffs::Vector{R}
end
julia> function (p::Polynomial)(x)
v = p.coeffs[end]
for i = (length(p.coeffs)-1):-1:1
v = v*x + p.coeffs[i]
end
return v
end
在 Julia 内部,普通的函数也是通过(无字段的)函子来实现的,所以二者本质上是一样的。
实例
定义
function f(x, y)
x + y
end
f(x, y) = x + y
f = x -> x + 1
性质
两种不同的组合函数的方式
复合运算符(从右向左运算)
(sqrt ∘ +)(3, 6)