Hello list,

I'm new at TT. After RTFMing i've tried to do macros that manipulate
lists and I've realized that I haven't understood how TT macros work.
Could you please tell me why the following constructs that look
equivalent to me behave so differently? What have I missed?


1) MACRO CAN'T RETURN A LIST:  I can't use a macro that expands to a
list in a loop. see this simple example:

[% list = [1..5] %]
[%
 MACRO macro_list BLOCK;
    list;
  END;
%]

list:
[%
 FOREACH element IN list ;
   "$element ";
 END;
%]

macro:
[%
 FOREACH element IN macro_list ;
   "$element ";
 END;
%]


Which gives the following output ( I would expect the same output in
both cases )

list:
1 2 3 4 5

macro:
ARRAY(0x843900c)




2) LIST MANIPULATION: straightforward list manipulation is ignored
inside MACRO, i need to resort to Virtual Methods. example list = [
1..5] doesn't work, I have to do list.splice + list.push inside a loop
like shown below:

[%
  MACRO initialize_push BLOCK;
    devnull = list.splice(0);
    FOREACH num IN [ 10..15 ] ;
       list.push(num) ;
    END;
  END;
%]
[%
  MACRO initialize_simple BLOCK;
    list = [ 6..10 ] ;
  END;
%]
[%
  MACRO show_list BLOCK;
     FOREACH element IN list;
   "$element ";
     END;
  END;
%]
manual initialization
[%
  list = [ 1..5 ];
  show_list;
%]
initialization with macro
[%
  initialize_simple;
  show_list;
%]
initialization with push macro
[%
  initialize_push;

  show_list;
%]

The output of this macro is

manual initialization
1 2 3 4 5
initialization with macro
1 2 3 4 5
initialization with push macro
10 11 12 13 14 15

And I had expected

manual initialization
1 2 3 4 5
initialization with macro
6 7 8 9 10
initialization with push macro
10 11 12 13 14 15



Thank you very much for your time,
Francesc

_______________________________________________
templates mailing list
[email protected]
http://lists.template-toolkit.org/mailman/listinfo/templates

Reply via email to