Автор | Сообщение |
|
| |
Пост N: 121
Зарегистрирован: 07.08.06
|
|
Отправлено: 02.03.13 11:05. Заголовок: preprocessor, правая часть после "=>": как заставить его воспринимать "[" и "]" как индексы массива?
hi all Дано: 1) двумерный массив пар {ключ, значение}, ключи - всегда в первом индексе. 2) функция aval4key(), получающая на вход массив и значение ключа и возвращающая значение по этому ключу. Функция вызывается достаточно часто, поэтому хочу преобразовать её вызовы в inlined-подстановки. То есть, думаю сделать что-то типа следующего: #xcommand INL_aval4key(<a>, <k>, @<v>) => <v>:=ascan(<a>,{|x||x[1]==<k>}) И в коде заменить вызовы функции на вот это: ... somekey='key1' someval=''; INL_aval4key(my_array, somekey, @someval) ... Трабл в том, что не получается подсунуть препроцессору квадратные скобки, задающие индекс (в примере выше - первый индекс в каждой паре, т.е. x[1]). Подскажите, плз, как это сделать (и допускается ли это вообще) ?
|
|
|
Новых ответов нет
[см. все]
|
|
|
| |
Пост N: 131
Зарегистрирован: 10.07.07
|
|
Отправлено: 02.03.13 12:02. Заголовок: Можно так попробоват..
Можно так попробовать x\[1] вместо |x[1]
|
|
|
|
| |
Пост N: 122
Зарегистрирован: 07.08.06
|
|
Отправлено: 02.03.13 13:10. Заголовок: Спасибо, получилось...
Спасибо, получилось. // test.prg #xcommand INL_aval4key(<a>, <k>, @<v>) => <v>:=<a>\[ascan(<a>,{|x|x\[1]==<k>})] #xtranslate INL_aval4key(<a>, <k>) => <a>\[ascan(<a>,{|x|x\[1]==<k>})] V=0; INL_AVAL4KEY(ARGS, 'PASS', @V) U=INL_AVAL4KEY(ARGS, 'PASS') // clipper test.prg /p + type test.ppo: V=0; V:=ARGS[ascan(ARGS,{|x|x[1]=="PASS"})] U=ARGS[ascan(ARGS,{|x|x[1]=="PASS"})]
|
|
|
|