4

ColdFusion コンポーネント内で、次のような関数を宣言します。

string function render(required Array actions) output=false {
//...
}

したがって、関数パラメーターは配列のみを受け入れることができます。ただし、配列に「ActionItem」オブジェクトのみが含まれていることを確認する必要があります (ActionItem.cfc コンポーネントがあります)。

ColdFusion で配列の内容をタイプヒントする方法はありますか? この場合、どのような解決策を提案しますか?

4

4 に答える 4

4

つまり、Peter がコメントで述べているように、基本的な答えは「できない」ということです。ColdFusion には、タイプフル配列の概念がありません。

これには 2 つの方法があります。まず、各配列項目を必要に応じて検証し、それが必要な型であることを確認する力ずくのアプローチです。これはピーターが提案していることであり、一般的に私がすることです。

ActionItemCollection.cfcそれ自体が の配列を含む を実装できず、オブジェクトのみを受け入れるようActionItemsにしておくことができないため、関数がその引数を受け取るまでに、コレクション内の各要素が間違いなく であることが「認識」されます。ActionItemCollection.cfcActionItemrender()ActionItemCollectionActionItem

render()とはいえ、要素が正当であるかどうかを確認し、そうでない場合は例外をスローするだけの場合、それはおそらく非常に多くの作業です。これは完璧な解決策ではありませんが、CF は不完全な状況を作り出しているので、十分公平です。

于 2013-07-16T12:49:19.317 に答える
3

実際には、ColdFusion は配列型の検証(型付き配列と混同しないでください) をサポートしていますが、プリミティブ型ではなく、カスタム コンポーネントでのみ機能するようです。ただし、このブログ エントリ以外に、この機能に関するドキュメントは見つかりませんでした。

コンポーネントがあるとしましょうSomeObject

次のように書くことができます。

<cffunction name="testArrayTypeValidation">
    <cfargument name="someObjects" type="SomeObject[]" required="yes">

    <cfdump var="#someObjects#">
</cffunction>

そして、次のように関数を呼び出します。

<cfset testArrayTypeValidation([new SomeObject()])>

ただし、配列内の最初のアイテムの型のみを検証することに注意してください。つまり、次も機能します。

 <cfset testArrayTypeValidation([new SomeObject(), 'some string'])>

また、プリミティブ型ではうまくいかないようでtype="string[]"、たとえば使用できないのは悲しいことです。

プリミティブ型の場合、特定の型のプリミティブのみを確実に含み、そのクラスを引数型として使用する独自の具象ラッパー クラスを実装する必要があります。

于 2013-09-11T15:40:24.337 に答える