【发布时间】:2017-04-22 16:23:57
【问题描述】:
我希望在 P6 中创建一个将其参数转换为字符串的宏。 这是我的宏:
macro tfilter($expr) {
quasi {
my $str = Q ({{{$expr}}});
filter-sub $str;
};
}
我是这样称呼它的:
my @some = tfilter(age < 50);
但是,当我运行程序时,我得到了错误:
Unable to parse expression in quote words; couldn't find final '>'
我该如何解决这个问题?
【问题讨论】:
-
只有 8 个字符
age < 50的程序会出现同样的错误。 -
Afaik,在当前(实验)宏设计/实现中,宏的所有参数都是ASTs。目前我不知道您如何(或是否)可以恢复到原始源代码。
-
@ralph 感谢您的 cmets。也许我所做的一开始并不是一个特别好的主意。我不是 Lisp 专家,但我认为如果这是一个 Lisp 宏,它不会对无与伦比的 '
-
报错信息很差但是和宏无关。你还没有定义
age。 Perl 6 必须立即 放弃 或 猜测您的意图,如果猜测错误则失败。社区选择让编译器猜测;当它看到一个未定义的“名词”时,它会猜测你稍后会将它定义为一个接受参数的子(函数)。所以它猜测<是争论的开始。<可以作为参数开始的唯一方法是它是否是 "quote words" construct 的一部分。因此出现错误消息。