我有一个基本上充当查找表的函数:
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 ++中的模板化功能类似。
答案 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,以确保它不会产生类型稳定性问题。