В Coldfusion 9 как мне указать, что функция возвращает изображение? - PullRequest
1 голос
/ 10 марта 2011

У меня есть функция cfscript, которая принимает изображение, созданное с помощью imageNew, и возвращает изображение.Как мне указать это в декларации?Пока у меня есть это:

function image_mutate(imageIn, Array mutations) {

Какой тип данных я использую для imageIn?Чертовски бесполезная документация перечисляет его как «образ ColdFusion», а если я получаю метаданные, он перечисляет его как «java.lang.class», что вряд ли является конкретным.

Ответы [ 2 ]

6 голосов
/ 10 марта 2011

Использование any:

function image_mutate(any imageIn, array mutations) {}

Вы можете использовать это вместо любого простого типа, массива, структуры или класса.Вы увидите много этого в ColdFusion, поскольку это не строго типизированный язык.

Если вам действительно необходимо убедиться, что что-то является изображением, используйте функцию isImage(), задокументированную здесь .

2 голосов
/ 25 марта 2011

Фактический тип возвращаемого файла - 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" - извините. Мне нравится поддерживать свои типы в разработке, а затем отключать проверку типов в производственной среде, поэтому я слышу вас.

...