Julia函数对象

Julia函数对象

Julia中的函数也是可操作的对象,也有自己的类型,即Function,而且其类型也是DataType,是Julia类型拓扑树的一部分;而定义的任何一个函数实现都是Function的实例。例如:

julia> isa(addtwo, Function)
true

此外,前文介绍的众多运算符在本质上也是函数对象,仅语法上有些特别而已,即:

julia> isa(+, Function) == isa(-, Function) == isa(*, Function) == isa(/, Function) == true
true

而且这些运算符号完全可以作为函数名使用。例如:
Julia函数对象

当然,每个符号对参数个数等方面的约束会有所不同,使用这种方式时需要注意。

类似于其他的常规对象,函数对象也可以进行一些操作,包括“是否相等”或是赋值等操作。例如通过赋值操作便可得到源函数的别名函数:

julia> addt = addtwo
addtwo (generic function with 1 method)  # 注意提示的函数名,并不是新的名字

julia> addt(1, 3)
4

对运算符同样适用,例如:

julia> add = +
+ (generic function with 163 methods)

julia> add(1, 3, 4)
8

或通过是否“相等”或“相同”的运算符,判断它们是否是同一种实现,即:

julia> addt === addtwo
true

julia> notaddtwo == addtwo
false

由此可见,“在一切皆对象”的Julia中,函数可以有着更多灵活的用法。

另外,基于Julia对Unicode的强大支持,定义函数时完全可以使用Unicode字符命名函数,例如:

julia> ∑(x, y) = x + y
∑ (generic function with 1 method)

julia> ∑(2, 3)
5

在公式众多的代码中,如果采用这些具有数学意义的符号定义函数,能够让表达式看起来更为自然、直观。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!