#define指令中调用扩展指令

前提:定义了一个扩展指令#now(),普通调用无任何问题.

现象:定义一个#define指令,在这个#define指令中,调用#now(),项目启动失败,报“ Directive not found: #now”,但是如果先删除#now()这行代码,把项目先启动起来,再添加#now()这行代码,再热部署就可以正常使用。

问题:猜想应该是项目启动加载时#define的优先级比扩展指令高,请问如何解决?


评论区

JFinal

2019-10-14 17:13

#define 定义出来的并不叫指令,而是叫模板函数,调用方法要添加一个字符 '@',得这样:
#@now()

#define 定义的函数与指令可以重名,不会影响

JFinal

2019-10-14 17:13

一定要注意区分模板函数与指令,这是两个完全不同的概念,定义与使用都不同

1055356469

2019-10-14 17:17

@JFinal #now()是扩展指令,在用#define定义的另一个模板函数中调用

1055356469

2019-10-14 17:22

@JFinal 就比如用#define指令 定义了个模板函数getDate(),在这个模板函数中调用扩展指令#now(),再再其他地方 #@getDate()调用模板函数,启动项目是会报错的,但是去掉调用扩展指令#now()的代码,把项目启动起来之后再加上调用扩展指令#now()的代码,热部署就可以了

JFinal

2019-10-14 17:24

@1055356469 这可能就是一个次序问题,先定义再调用才可以

例如,你是不是将 #define 定义的 getData() 函数添加为了 sharedFunction 了,如果没有的话,需要在模板中能看到 #define getDate() , 或者是 #include 进来被定义的 getDate()

仔细检查一下,这个问题应该比较好解决

JFinal

2019-10-14 17:24

再者,为啥到现在都还没有贴出异常信息,解决问题不能靠猜

1055356469

2019-10-14 17:40

@JFinal 找到问题了,我把addDirective写在了addSharedFunction后面,换个位置就可以了,感谢

JFinal

2019-10-14 17:40

@1055356469 没错,指令也是先添加再使用的

热门反馈

扫码入社