Template Toolkit: как вернуть хеш из MACRO BLOCK - PullRequest
0 голосов
/ 19 февраля 2019

Можно ли написать макросы или блоки, которые возвращают хэш вызывающей стороне?

Я попытался модулировать некоторый код шаблона:

[%- 
MACRO MakeSomeThing(something) BLOCK;
  s = {  a => 'a',
         b => something,
         c => 'c'
      };
  # RETURN s;  # not allowed
  # s;         # just returns the hash ref string (HASH(0x32e42e4))
END;


  newOb =  MakeSomeThing('foo');
  dumper.dump({'newOb' => newOb});
%]

Есть ли какой-нибудь способ реализовать подобноерисунок

1 Ответ

0 голосов
/ 19 февраля 2019

Я не смог найти способ, когда столкнулся с той же проблемой.

В качестве обходного пути вы можете передать ссылку и заставить макрос изменить указанную переменную.Это работает как для массивов, так и для хэшей.

Пример определения:

[%
   # usage: newOb={}; MakeSomeThing(newOb, something)
   MACRO MakeSomeThing(rv, something) BLOCK;
      rv.a = 'a';
      rv.b = something;
      rv.c = 'c';
   END;
%]

Пример использования:

[%
   newOb = {};
   MakeSomeThing(newOb, 'foo');
   dumper.dump({'newOb' => newOb});
%]
...