perl6 Как ОЦЕНИТЬ строку, заданную пользователем, чтобы быть функцией? - PullRequest
6 голосов
/ 24 марта 2019

Мне нужно сгенерировать количество точек данных в соответствии с функциями, предоставленными пользователями.Пользователи входят в функцию через приглашение («Enter function:»);Я пытаюсь использовать EVAL, но продолжаю получать ошибки.Каков наилучший подход?Спасибо !!!

> my $k = prompt("Enter function: ");
Enter function: sub x($a) { say $a * 2; };
> $k
sub x($a) { say $a * 2; };
> use MONKEY-SEE-NO-EVAL
Nil
> use Test
Nil
> EVAL $k
&x
> say x(4)
===SORRY!=== Error while compiling:
Undeclared routine:
    x used at line 1

Кроме того, у меня есть некоторые проблемы с Q: f для интерполяции функции.

> Q:f {  sub x($a) { say $a * 2; }; }
  sub x($a) { say $a * 2; }; 
> &x
===SORRY!=== Error while compiling:
Undeclared routine:
    x used at line 1

Заранее спасибо за любые предложения !!!

1 Ответ

6 голосов
/ 24 марта 2019

Это ошибки времени компиляции - & x не существует во время компиляции.Вместо этого вы должны EVAL свою процедуру в имя, которое вы делаете во время компиляции (в данном случае &my-x):

use MONKEY-SEE-NO-EVAL;
my $string = q|sub x($a) { say $a * 2; };|;
my &my-x = EVAL $string;
my-x(1);
...