Une*_*ons 7 variables coldfusion function
我正在编写一个循环访问注册页面上的一些信息的函数.在循环中我试图基于数组调用函数.我遇到的问题实际上是正确地调用函数,因为我试图将变量作为函数名的一部分.
这是我的代码:
<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>
Run Code Online (Sandbox Code Playgroud)
所以,我有三个函数:validate_email,validate_uname,validate_pass.如果我输入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>
Run Code Online (Sandbox Code Playgroud)
现在,我明白当你使用writeoutput()并且你正在调用一个函数时,你需要在任一端使用哈希符号.所以,让我说我这样写:
writeoutput('#validate_#func[2]#(#fields[i]#)#');
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为第二个哈希符号取消了函数调用.这是函数最终的样子(电子邮件示例):
writeoutput('#validate_email('email@site.com')#');
Run Code Online (Sandbox Code Playgroud)
如何用适当的变量名替换'email'(#validate_email ...),仍然可以使用该功能?我希望我已经让这个变得可以理解了!
Pet*_*ton 11
函数也是变量,因此以相同的方式对数组,结构和范围使用括号表示法,您可以使用它来访问动态变量名称(以及动态函数名称)
例如:
<cfloop index="Field" list="email,uname,pass">
<cfset Result = Variables['validate_'&Field]( Variables['r_'&Field] ) />
...
</cfloop>
Run Code Online (Sandbox Code Playgroud)
嗯......不太好.由于Adobe ColdFusion中的一个错误,它不能像那样工作(虽然它在其他CFML引擎中,如Railo),你必须将它分成两行,如下所示:
<cfloop index="Field" list="email,uname,pass">
<cfset TmpFunc = Variables['validate_'&Field] />
<cfset Result = TmpFunc( Variables['r_'&Field] ) />
...
</cfloop>
Run Code Online (Sandbox Code Playgroud)
(这假设函数和字段都在variables范围内,如果它们不是你需要引用它们所在的范围.)
如果函数在具有state的对象中,则此方法确实存在问题,它会丢失对这些变量的引用.
在CF10上,有invoke功能.早期版本的CF需要使用cfinvoke标签.
(作为旁注,CF10确实添加了使用括号表示法引用函数结果的反向能力,即doSomething()[key]有时会有用.)
| 归档时间: |
|
| 查看次数: |
2587 次 |
| 最近记录: |