首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ColdFusion 9动态方法调用

ColdFusion 9动态方法调用
EN

Stack Overflow用户
提问于 2012-09-28 07:07:39
回答 2查看 5.2K关注 0票数 5

我正在努力找出在ColdFusion 9中调用动态方法的正确<cfscript>语法。我已经尝试了许多变体,并进行了很好的搜索。

<cfinvoke>显然是我想要的标签,但遗憾的是我不能在我的纯cfscript组件中使用它,因为它是在ColdFusion 10中实现的。

coldfusion 9 dynamically call method

我已经在我的CFC中尝试了以下几种方法:

代码语言:javascript
运行
复制
/** Validate the method name **/
var resources = getResources();
if (structKeyExists(variables.resources, name)) {
  variables.resourceActive[name] = true;
  var reflectionMethod = resources[name];
  var result = "#reflectionMethod.getMethodName()#"(argumentCollection = params);
}

其中reflectionMethod.getMethodName()的返回值是我要调用的方法名。它100%返回正确的值(方法的名称),其中该方法被正确定义并可访问,

我的错误是该行上的语法错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-28 07:30:23

你不想得到方法名,你想要得到实际的方法,例如:

代码语言:javascript
运行
复制
function getMethod(string method){
    return variables[method];
}

调用,因此:

代码语言:javascript
运行
复制
theMethod = getMethod(variableHoldingMethodName);
result = theMethod();

不幸的是,人们不能简单地这样做:

代码语言:javascript
运行
复制
result = getMethod(variableFoldingMethodName)();

或者:

代码语言:javascript
运行
复制
result = myObject[variableFoldingMethodName]();

因为CF解析器不喜欢将括号或括号放在一起。

我所建议的方法需要注意的是,它将方法从CFC中拉出,因此它将在调用代码的上下文中运行,而不是在CFC实例中运行。根据方法中的代码,这可能重要也可能无关紧要。

另一种选择是将静态命名的方法注入到对象中,例如:

代码语言:javascript
运行
复制
dynamicName = "foo"; // for example
myObject.staticName = myObject[dynamicName];
result = myObject.staticName(); // is actually calling foo();
票数 14
EN

Stack Overflow用户

发布于 2012-09-28 07:13:34

假设该方法在您当前的(变量)作用域中,您可以尝试:

代码语言:javascript
运行
复制
var result = variables[reflectionMethod.getMethodName()](argumentCollection = params);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12631347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档