2012-01-06 5 views
1

[正規表現]を[変数名]または[関数名]として使用する方法を見つけようとしています。この機能を提供するプログラミング言語やスクリプト言語はありますか?私は(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

なぜですか?この問題を解決するためには、本当の問題を解決するためのより良い方法が必要です。 –

+0

私は長い名前の関数の正確な名前を暗記する必要がないように、複数の名前で関数または変数を参照することを可能にしようとしています。正規表現(convert | change)((int | integer)Array)(To)(DoubleArray | arrayOfDoubles)に一致する文字列を入力し、その正規表現を特定の関数を参照するようにすると、関数。 –

+0

また、私が作業しているソースコードのテキストを自動的に置き換えるようなマクロを設定することもできます。それはよりよい解決策かもしれません。 –

答えて

1

Perlでは、あなたはAUTOLOADを使用して機能するために、このようなことを行うことができます。

Example

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) 

れていない変数について確認が、それは同様に、おそらく可能です。

+1

私はこの質問に対する答えを見て非常に感心しています。これはおそらく私がここに投稿した中で最も奇妙で難解な質問であり、あなたはまだそれに答えていました。 :) –

関連する問題