1つの非常に単純なアイデアとPerlでの実装を共有したいと思います。
考え方は次のとおりです。パラメーターが送信されるだけでなく、これらのパラメーターの属性も送信される特定の機能があります。 何だろう? たとえば、コマンドと目的のクエリ文字列。 または彼のリプレイのアクションと聖職者。
いくつかのオプションを使用できます。 私が思うに、最もシンプルでユーザーフレンドリーなフォームは、特定のオブジェクトのプロパティが同じオブジェクトに視覚的に関連付けられている場合の解決策になるはずです。 OOPのようなものは、もちろん簡単です。
これには何を使用できますか? ハッシュ。 ここでのオブジェクトはキーとして機能し、属性はハッシュ値です。 さらに、プログラムはオブジェクトとそのプロパティの存在について何も知らない場合があります。これはすべて動的にインターセプトできます。
単純な1つのキー、1つのパラメーターから始めましょう。
一番下の行:別の内部、外部のいくつかの関数があります。 ユーザーは外部から何らかの関数を呼び出し(この場合は単純です)、そこに何らかのパラメーターを渡します。
sub Simple {
# ,
#
our %hash = ( @_ );
# $sub - . ,
my ( $sub ) = keys( %hash );
#
eval $sub or print @!;
# ,
sub hello {
my ( $name ) = values( %hash );
printf " Hello, %s!", $name;
}
sub good_beye {
my ( $name ) = values( %hash );
printf " Good Beye, %s!", $name;
}
}
&Simple( hello => 'Alex' );
2番目のケースはもう少し複雑です。
プログラムは、転送されたデータの量と量を知りません。
一番下の行:プログラムは、人に連続して数回挨拶できます。 さらに、私と言っても、数人の完全に異なる人々と無数の人々がいます。 そして彼は彼女が言われた回数だけ皆に挨拶します。 オブジェクトとして、名前として、パラメータとして、各名前の挨拶の数。
sub Hello {
# ,
my %hash = ( @_ );
#
my @names = keys( %hash );
# -
my @repeat = values( %hash );
#
for( my $i=0; $i<@names; $i++ ) {
$repeat[$i] ||= 1;
for( my $j=0; $j<$repeat[$i]; $j++ ) {
printf " Hello, %s!\n", $names[$i];
}
}
}
&Hello( sasha => 3, sveta => 10, Vasya );