Julia是有多分派的,所以一般不用为一种函数名称为某个特定类型添加后缀,比如
op_mytype(....)
那,定义函数时是让Julia找到函数名即找到该函数,还是多多利用多分派呢?为特定类型添加名称后缀是不是多此一举?
Julia是有多分派的,所以一般不用为一种函数名称为某个特定类型添加后缀,比如
op_mytype(....)
那,定义函数时是让Julia找到函数名即找到该函数,还是多多利用多分派呢?为特定类型添加名称后缀是不是多此一举?
Images.jl 里面大概的思路是:
_
另起一个名字例如 colorview
的实现定义在_colorview
,然后colorview
只负责API的分派
目前看下来大部分的Julia代码都是这样写的,因为可以避免手动维护一个分派列表:
# 这种写法在MATLAB或者Python里很常见,但是在Julia下不需要这样做
function foo(args...)
if call_method_1(args...)
foo1(args...)
elseif call_method_2(args...)
foo2(args...)
else
error("unrecognized argument")
end
end
function foo1(...)
...
end
function foo2(...)
...
end
不错,既然Julia提供了多分派就尽量用多分派,一般项目不会因为查表而产生多大的性能影响。
为了让分派不容易产生歧义,一般会构造一个结构体:
abstract type AbstractMyAlgorithm end
struct Alg1 <: AbstractMyAlgorithm
arg1
arg2
arg3
end
struct Alg2 <: AbstractMyAlgorithm
arg4
arg5
end
function foo(alg::Alg1, args...)
...
end
function foo(alg::Alg2, args...)
...
end
实际上 Julia 对这个优化已经做到几乎没有overhead了,整个Base里的函数都充斥着这种写法