私は登録ページ上のいくつかの情報をループ機能を書いています。ループ内では、配列に基づいて関数を呼び出そうとしています。私は、私は、関数名の一部として変数を組み込むようにしようとしているので、実際に、適切な機能を呼び出しているとの問題を抱えています。 validate_email、validate_uname、validate_pass:はどうすればColdFusionでの関数名の一部として変数の名前を呼ぶことができますか?
<cfscript>
fields = arraynew(1);
fields[1] = 'r_email';
fields[2] = 'r_uname';
fields[3] = 'r_pass';
for(i = 1; i lte arraylen(fields); i = i + 1)
{
func = fields[i].split('r_');
func = 'validate_#func[2]#(#fields[i]#)';
}
</cfscript>
だから、私は3つの機能を持っている:
は、ここに私のコードです。 writeoutput()をスローして関数の結果を出力しようとすると、関数は動作しません。
<cfscript>
fields = arraynew(1);
fields[1] = 'r_email';
fields[2] = 'r_uname';
fields[3] = 'r_pass';
for(i = 1; i lte arraylen(fields); i = i + 1)
{
func = fields[i].split('r_');
func = 'validate_#func[2]#(#fields[i]#)';
writeoutput('#func#');
}
</cfscript>
今、私はあなたがのWriteOutput()を使用している、とあなたが関数を呼び出しているとき、どちらかの端にハッシュ記号が必要であることを理解して:
は、ここでそのコードです。それでは、私はこのようにそれを書きましょう:
writeoutput('#validate_#func[2]#(#fields[i]#)#');
第2のハッシュ記号は、関数呼び出しを相殺するので、それは動作しません。この関数は、最終的に(電子メールの例を)どのように見えるべきかです:
writeoutput('#validate_email('[email protected]')#');
はどのようにして、適切な変数名でのメール '(#validate_emailを...)置き換えることができ、かつ、まだ機能の仕事を持っていますか?私はこれを理解できるようにしたいと思う!
これはCFのバグではありません.Peter:これは決して実装されていません。コメントをそのような効果に修正したいかもしれません。さもなければスポット・オンの答え。 –
'Variables.Bob()'と 'Variables ['Bob']()'の間に違いはありませんが、2番目の変数はエラーを投げます。私はそれを実装されていない機能ではなく、ブラケット表記のバグと呼びます。 –
ありがとうございます。私は両方の提案が素晴らしい作品を受け取った。私はCFには新しいので、私は群衆と一緒に行くし、他の人よりむしろこれを使用しています。もう一つはもう少し簡単ですが、それに問題がある場合、私はそれに取り掛かりたくありません!再度、感謝します! –