"模板化" julia

时间:2017-08-31 02:58:44

标签: templates julia

我有一个基本上充当查找表的函数:

function lookup(a::Int64, x::Float64, y::Float64)

if a == 1
z = 2*x + y
else if a == 2
z = 5*x - 2*y
else if a == 3
...
end

return z

end

变量a基本上决定了z的关系。

此函数需要一段时间才能编译,并且在运行时也不是最有效的。

你能为一个(例如a = 1)的一个实例编译函数lookup吗?该函数不太可能调用a。的所有可能函数。

我相信这样的功能与C ++中的模板化功能类似。

1 个答案:

答案 0 :(得分:4)

Julia的编译器只能调度参数的类型,而不是它们的值,因为该值仅在运行时已知。您可以通过创建"值类型"来欺骗一点,其中变量的不同值作为不同的类型:

lookup(::Type{Val{1}}, x, y) = 2x+y
lookup(::Type{Val{2}}, x, y) = 5x-2y
a = 2
lookup(Val{a}, 2, 3)
# 4

如果您想使用此方法,请先阅读https://docs.julialang.org/en/stable/manual/performance-tips/#Types-with-values-as-parameters-1,以确保它不会产生类型稳定性问题。