我正在编写一个递归过程,称为“subliner3”。简单来说,它取代了:
[object method]
和Object->method()
[object method:attr1 attr2 ...]
和object->method(attr1,attr2,...)
在 (2) 中替换 (1) 和 (2) 是递归的。任何属性都可能类似于 (1) 或 (2)。
因此,此代码会导致问题:
while {[regsub -all {\[([^\[\]:]+)[:]([^\[\]]+)\]} $subline "[subliner3 "\\1" "\\2"]" subline]} {}
这应该在 subline 中准确找到 (2)(subline 是一个属性列表)并再次为它调用函数。问题是,当使用 regsub 的 \1 和 \2 subliner3 调用 subline 时,subliner3 真的得到“\1”和“\2”,所以看起来它们是在 subliner3 调用之后被解释的。如何使用解释的 \1 和 \2 调用 [subliner3 "\1" "\2"]?
样本输入:
[self runAction:[CCSequence actions:[CCDelayTime actionWithDuration:5], [CCCallFunc actionWithTarget:self selector:@selector(resetMessage)], nil]];
输出:
self->runAction(CCSequence::actions(CCDelayTime::actionWithDuration(5), CCCallFunc::actionWithTarget(self, @selector(resetMessage)), nil);