Форум » Clipper » preprocessor, правая часть после "=>": как заставить его воспринимать "[" и "]" как индексы массива? » Ответить

preprocessor, правая часть после "=>": как заставить его воспринимать "[" и "]" как индексы массива?

p519446: 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]). Подскажите, плз, как это сделать (и допускается ли это вообще) ?

Ответов - 2

TimTim: Можно так попробовать x\[1] вместо |x[1]

p519446: Спасибо, получилось. // 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"})]



полная версия страницы