「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]} {}
これは、サブライン (サブラインは属性リスト) で正確に (2) を見つけて、関数を再度呼び出すことになっています。問題は、subline が regsub の \1 と \2 で呼び出されると、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);