Macros 如何从宏内部引用外部别名?

Macros 如何从宏内部引用外部别名?,macros,apache-pig,Macros,Apache Pig,我有一个要在宏中使用的别名: foo = ....; define my_macro (z) returns y { $y = join $z in id, foo on id; }; a = my_macro(b); 唉,我得到了一个错误: Undefined alias: macro_my_macro_foo_0 当然,我可以将foo作为en参数传递: define my_macro (foo, z) returns y { $y = join $z in id, $foo

我有一个要在宏中使用的别名:

foo = ....;
define my_macro (z) returns y {
   $y = join $z in id, foo on id;
};
a = my_macro(b);
唉,我得到了一个错误:

Undefined alias: macro_my_macro_foo_0
当然,我可以将
foo
作为en参数传递:

define my_macro (foo, z) returns y {
   $y = join $z in id, $foo on id;
};
a = my_macro(foo,b);
这条路对吗


如果
foo
实际上是一个相对复杂的对象,是否会为
my_macro
的每个宏扩展重新计算它?

是的,第二种方法是正确的,您需要将别名作为参数传递给macro,否则它在macro内部将不可见

另一方面,宏内部定义的别名将不会在外部访问,如果要访问别名,请使用此格式
宏__

a,10,1000
b,20,2000
c,30,3000
10,aaa
20,bbb
30,ccc
define my_macro (foo,z) returns y {
   $y = join $z by g1, $foo by f2;
   test = FOREACH $y generate $0,$2;
};

foo = LOAD 'in.txt' USING PigStorage(',') AS (f1,f2,f3);
b  = LOAD 'in1.txt' USING PigStorage(',') AS (g1,g2);
C = my_macro(foo,b);
DUMP C;
--DUMP macro_my_macro_test_0;
(10,aaa,a,10,1000)
(20,bbb,b,20,2000)
(30,ccc,c,30,3000)
(10,a)
(20,b)
(30,c)