は必要でvar範囲ループ変数CFScript?
-
26-09-2019 - |
質問
使用時CFMLとCF9にしたいvarの範囲っループ変数;この場合に local.i
, 例えば:
<cfloop list="#this.list#" index="local.i">
<cfif Len(local.i) GT 10>
// do something
</cfif>
</cfloop>
私は、最近に変換する一部のものへのCFScript、私は失望していることが分かったがループに渡りリストCFScript)俺だってまだvar範囲っループ変数は、どのよう:
for (i = 1; LTE ListLen(this.list); i = i + 1 ) {
if (Len(ListGetAt(this.list, i) GT 10)) {
// do something
}
}
きるよう local.i = 1
や local.i = local.i + 1
isteadのサンプルコードは私のですか。は本当にしないといけないのか?
編集:ばいいのか調べてみるのも良いと思い場合はCFScript形のCFMLループは正;私が思うよりCFMLループの使用 ,
(コンマとスペース) delimiter
引数は、非存在にCFScriptのループを実行します。
解決
すべての機能をお使いのは、変数の範囲はデフォルトで指定しなければ、作用により起こることから省略しないスレッドセーフです。どの段階においても従来とは var
あるべきです。利用 local
.
としてのカンマ+スペース区切り記号は二つのことをやろうとしてい
場合にはさんご承知のように区切り文字引数のリスト機能なマルチ文字の区切り文字には複数の区切り文字;お一覧が表示されますので、そこに分割れの発生、カンマで区切り、それぞれ発生のスペースです。
お使いいただいた同一の引数として
listLen
やlistGetAt
方法はこのように:for (i = 1; LTE ListLen(this.list, ', '); i = i + 1 ) { if (Len(ListGetAt(this.list, i, ', ') GT 10)) { // do something } }
他のヒント
あなたは間違いなく、アダムが言うようにローカルスコープを使用する必要がありますが、ループの場合、私は読みやすさのために、「VAR」のキーワードではなく、「ローカル」接頭辞を使用するための強力なケースがあると思います。 CF9を使用すると、もはや機能の上部にある場所のvar宣言に強制しているので、すべてあなたが行う必要がスレッドセーフになるために、すべてのインデックス「i」の変数のためのあなたの「のための」条件ステートメントに「VAR」を追加しません。
前のリストの長さを保存するループを開始し、あなたのコードは次のようになり、より簡潔なI ++インクリメントスタイルを使用することについてベンの良い点を取り入れます:
var listLength = ListLen( this.list );
for (var i = 1; LTE listLength; i++ ) {
if (Len(ListGetAt(this.list, i) GT 10)) {
// do something
}
}