Julia:sortslices:是否可以将排序逻辑作为变量而不是文字传递?

Julia: sortslices: is it possible to pass the sort logic as a variable rather than a literal?

unsorted = [3 5 9; 3 -6 11; 2 -4 8; 2 7 10]
sorted_1 = sortslices(unsorted, dims=1, by=x->(x[1],-abs(x[2])) )

按预期给出:

4×3 Array{Int64,2}:
 2   7  10
 2  -4   8
 3  -6  11
 3   5   9

我尝试将第三个参数放入一个变量中并传递给它:

unsorted    = [3 5 9; 3 -6 11; 2 -4 8; 2 7 10]
sort_string = "by=x->(x[1],-abs(x[2]))"
sorted_2    = sortslices(output, dims=1, sort_string) 

给出:

ERROR: LoadError: MethodError: no method matching sortslices(::Array{Float64,2}, ::String; dims=1)
Closest candidates are:
  sortslices(::AbstractArray; dims, kws...) at multidimensional.jl:1751

是否有语法调整使这项工作有效,或者没有这样的解决方案?

(我尝试这样做的原因是我正在编码的排序逻辑取决于多个用户输入,其中一些不是二进制的。 我可以做嵌套的 ifs 来给出 2 * 3 * 4 组合,每个组合都有一个 sortslices 调用,但是将排序逻辑连接为一个字符串会更整洁,它只涉及 2+3+4 if 行)

P.S。我正在使用 Julia 1.5.3

您可以使用元编程:

julia> sort_string = "x->(x[1],-abs(x[2]))";

julia> sorted_2 = sortslices(unsorted, dims=1, by=Meta.eval(Meta.parse(sort_string)))
4×3 Matrix{Int64}:
 2   7  10
 2  -4   8
 3  -6  11
 3   5   9