enjoy define定义函数问题

我在做一个通用排序函数的定义,函数如下

#prop 为列字段
#sort 为asc desc
#defaultOrder 为是否有默认查询
#define commonOrder(prop,sort,defaultOrder)
    #if(prop)
        order by #(prop) #(sort)
    #else
        #(defaultOrder)
    #end
#end

我可以在其他模板去调用这个函数

#@commonOrder(prop,sort,null) //这个没有默认排序
#@commonOrder(prop,sort,"order by field desc")//这个有默认排序

我的需求是在没有默认排序的时候能否不写第三个参数,也就是在定义函数时某些参数是否可以缺省

#@commonOrder(prop,sort,null) => #@commonOrder(prop,sort)

我尝试了下,是不行的

Wrong number of argument to call the template function, right number is: 3

我又尝试了一下看是否支持java的重载,定义了两个commonOrder

#define commonOrder(prop,sort)
    #if(prop)
        order by #(prop) #(sort)
    #end
#end

#define commonOrder(prop,sort,defaultOrder)
    #if(prop)
        order by #(prop) #(sort)
    #else
        #(defaultOrder)
    #end
#end

enjoy目前不支持重载的方式,他会报重复定义的问题

Template function "commonOrder" already defined in /org/sql/_common.sql, line 3


评论区

杜福忠

2021-04-12 11:30

我有两个建议:
1:对第二个commonOrder增加一个s,commonOrders
2:使用 指令扩展 做一个#commonOrder 里面 extends Directive
exprArray.length 里面可以随意控制 https://jfinal.com/doc/6-4 》13、指令扩展

久伴轻尘

2021-04-12 11:38

@杜福忠 做个指令是个不错的方法,波总说还可以使用#call

热门反馈

扫码入社