Использование регулярного выражения в качестве имени функции или переменной - PullRequest
1 голос
/ 06 января 2012

Я пытаюсь найти способ использовать [регулярное выражение] в качестве [имени переменной] или [имени функции]. Есть ли какие-либо языки программирования или сценариев, предлагающие эту функцию?

Пример нужной мне функции (с использованием Java-подобного псевдокода):

int <<(my|a|an)(number|Integer)>> = 10;
//this variable has a regular expression as a name

function <<((print|write)(Stuff|Things|Words))>>(int myInt){
//this function has a regular expression as a name
     System.out.println(myInt);
}

printStuff(myInt); //should have the same effect as the next line
writeWords(anInteger); //should have the same effect as the previous line

1 Ответ

1 голос
/ 06 января 2012

В Perl вы можете делать такие вещи для функций, используя AUTOLOAD.

Пример

my @refun = (
        [qr/(print|write)(Stuff|Things|Words)/ => sub { print "printStuff(@_)\n"; }],
        [qr/fo+(?:ba+r)?/ => sub { print "foobar(@_)\n"; }],
        );

our $AUTOLOAD;
sub AUTOLOAD{
        for(@refun){
                my ($re, $sub) = @$_;
                goto &$sub if $AUTOLOAD =~ /$re/;
        }

        my ($package, $filename, $line) = caller;
        die "Undefined subroutine &$AUTOLOAD called at $filename line $line.\n";
}


printStuff(10);
writeWords(10);
foo();
fooooooooooooooobar(1,2,3);

Выход:

printStuff(10)
printStuff(10)
foobar()
foobar(1 2 3)

Не уверен насчет переменных, но, возможно, это также возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...