2011-01-06 27 views
7

CFML ve CF9'u kullanırken genellikle döngü değişkenlerimi kapsar. Örneğin bu durumda local.i, içinde: Geçenlerde CFScript içine bazı şeyler dönüştürerek başladı veCFScript'teki kapsam döngü değişkenleri için gerekli mi?

<cfloop list="#this.list#" index="local.i"> 
    <cfif Len(local.i) GT 10> 
    // do something 
    </cfif> 
</cfloop> 

ben merak ediyorum (benim hayal kırıklığı ben CFScript bir liste üzerinde döngü hiçbir şekilde olduğunu öğrendim) hala var benim döngü değişkenleri kapsam ve nasıl olmalıdır:

for (i = 1; LTE ListLen(this.list); i = i + 1) { 
    if (Len(ListGetAt(this.list, i) GT 10)) { 
    // do something 
    } 
} 

ben olmalı local.i = 1 ve benim örnekte örnek kod local.i = local.i + 1 Istead yapıyor? Bu gerekli?

EDIT: CFML döngüsünün CFScript formunun doğru olup olmadığını da sormalıyım; Sadece döngü CFScript sürümünde olmayan varlığını görünüyor delimiter argüman, benim CFML döngü bir , (virgül ve boşluk) kullandığını fark Soruyorum çünkü. öyle olmadığını-evreli atlayarak yapacak birini belirtmek yoksa

+1

bir şey Ben dikkat - Sürece senin " bir şey yap "listenizin uzunluğunu değiştirebilir, onu bir değişkende saklayabilirim ve buna döngü. Anladığım kadarıyla, bunu yazdığınız şekilde, her döngü için listlen() işlemi çağrılacaktır. –

cevap

6

Tüm fonksiyonlar hala varsayılan olarak değişkenler kapsamını kullanın. Daha önce var numaralı telefonu kullanmış olmanız gerekiyorsa, şimdi local'u kullanmalısınız. virgül + boşluk sınırlayıcı gelince

, iki şey: Eğer farkında değildir durumunda

  1. , liste işlevinin ayraçlar argümanı birden fazla sınırlayıcı içindir, çoklu karakter sınırlayıcı için değil; Böylece listeniz her bir virgülün yanı sıra bir alanın her oluşumu için bölünecektir.

  2. Çok gibi, listLen ve listGetAt yöntemlerin bir parçası olarak aynı tartışmayı kullanın:

    for (i = 1; LTE ListLen(this.list, ', '); i = i + 1) { 
        if (Len(ListGetAt(this.list, i, ', ') GT 10)) { 
        // do something 
        } 
    } 
    
+0

teşekkürler! Sadece açık olmak gerekirse, "UDF'ler hala değişkenler kapsamını kullanır" dediğinizde - bu tanım, CFC bileşenimde kendimi beyan ettiğim tüm işlevleri içeriyor mu? – Mohamad

+1

Hayır, CFC içindeki herhangi bir yöntem yerel kapsam için varsayılan olacaktır. Ben atıfta bulundu UDF'ler başka bir yerde olurdu (örneğin özel etiket, cfm şablonuna, vs) yerel değişkenlerin tüm kullanarak emin kapsamını olmak istersiniz böylece değişkenler kapsamına –

+2

Unscoped değişkenler varsayılan ya yeni "yerel "kapsam" veya "var" anahtar sözcüğünü kullanma. –

5

Kesinlikle Adam diyor gibi yerel kapsamı kullanmak gerekir, ancak döngüler halinde Ben okunabilirlik uğruna "yerel" önek yerine "var" anahtar sözcüğünü kullanmak için güçlü bir durum olduğunu düşünüyorum. CF9 ile öylesine yapmanız gereken "i" değişkenleri parçacığı güvenli olmak için tüm indeksi için koşul "için" ifadesine "var" ekleyin, artık işlevi üstündeki var bildirimleri yerleştirmek zorunda konum.

önce listenin uzunluğunu tasarruf döngü başlayan ve kod olurdu i stilini artırır ++ daha özlü kullanma hakkında Ben'in iyi noktada alarak

:

var listLength = ListLen(this.list); 
for (var i = 1; LTE listLength; i++) { 
    if (Len(ListGetAt(this.list, i) GT 10)) { 
    // do something 
    } 
} 
İlgili konular