作为一个 Julia 包的开发者,我写了多个如下类型的函数:
function scatterplot(data; x_col=:x, y_col=:y)
data |> @vlplot(:circle, x=x_col, y=y_col)
end
现在的问题是,我实际上想在这个函数中实现kwargs
,类似于:
function scatterplot(data; x_col=:x, y_col=:y; kwargs...)
data |> @vlplot(:circle, x=x_col, y=y_col;kwargs...)
end
但是由于@vlplot是一个宏,所以这实际上不起作用。因此,我需要像以下这样实际使用元编程:
function example(data;xcol,ycol,kwargs...)
x = kwargs
expression = "@vlplot(data=$data,mark=:point, x=$xcol, y=$ycol,"
for (k,v) in x
add = string(k,"=",v,",")
expression = expression*add
end
expression = expression[1:end-1]*")"
return expression
end
事实上,如果我想使用“kwargs”,我希望避免为每个函数编写此循环,因此,有什么方法可以做到这一点吗?
我的想法是以某种方式"装饰"每个函数,例如
@decorate_with_kwargs scatterplot
。这可行吗?
vlplot(args...; kwargs...)
吗?- 这应该是正确的方法。 - Przemyslaw Szufel