在coldfusion 9中如何指定函数返回图像?

时间:2011-03-10 10:19:40

标签: coldfusion coldfusion-9

我有一个cfscript函数,它接受用imageNew创建的图像,并返回一个图像。如何在声明中指定?到目前为止我有这个:

function image_mutate(imageIn, Array mutations) {

我对imageIn使用什么数据类型?那些血腥无用的文档将其列为“一个ColdFusion图像”,如果我得到元数据,它会将其列为“java.lang.class”,这几乎不具体。

2 个答案:

答案 0 :(得分:6)

使用any

function image_mutate(any imageIn, array mutations) {}

您可以使用它代替任何简单类型,数组,结构或类。你会在ColdFusion中看到很多这样的东西,因为它不是强类型语言。

如果确实需要确保某些内容是图片,请使用isImage()函数记录here

答案 1 :(得分:2)

返回的实际类型是coldfusion.image.Image。你几乎就在那里使用java.lang.Class - 这是java.lang.Class的实际实例,它代表了coldfusion.image.Image的含义。要找出我们正在处理的类,你需要向java.lang.Class提出几个问题:

<cfdump var="#ImageNew()#"/>
<cfdump var="#GetMetaData(ImageNew())#"/>
<cfdump var="#GetMetaData(ImageNew()).getCanonicalName()#"/>
<cfdump var="#GetMetaData(ImageNew()).getName()#"/>
<cfdump var="#GetMetaData(ImageNew()).getSimpleName()#"/>

所以,基于我回复的回复,我尝试了几个场景:

<cffunction name="GetImage" access="private" output="false" returntype="Struct">
    <cfreturn ImageNew()/>
</cffunction>

<cffunction name="GetImage" access="private" output="false" returntype="coldfusion.image.Image">
    <cfreturn ImageNew()/>
</cffunction>

<cffunction name="GetImage" access="private" output="false" returntype="Image">
    <cfreturn ImageNew()/>
</cffunction>

然而,在实践中,所有这些都在运行时失败了我们:

The value returned from the GetImage function is not of type Struct.
The value returned from the GetImage function is not of type coldfusion.image.Image.
The value returned from the GetImage function is not of type Image.

我认为他们失败的原因是因为ColdFusion可能编译我的代码而不导入coldfusion.image命名空间。当然,它使用ImageNew(),但这可能只是导入类似coldfusion.globalFunctions的东西。因此,我的CFC不知道coldfusion.image.Image究竟是什么。

我认为你坚持使用returntype="Any" - 抱歉。我喜欢保持我的类型强大的开发,然后关闭生产中的类型检查,所以我听到你。