2011-06-10 10 views

cevap

2

Sadece sınıf veya senaryo kapsamındaki değişkeni bildirin, ardından yöntemlerin veya kapaklarınızın içinden erişin. Örnek olmasa da, probleminiz için daha spesifik olmak zor. Bununla birlikte, genel değişkenler genellikle kötü biçim kabul edilir.

Değişkeni neden tek bir işlevden döndürmeyin, sonra bir sonrakine aktarın?

+0

Değeri olan değişkeni kullanmak istersem ne olur? bir kapatma içinde ned? E.g: betiğin başında def = null var. Şimdi bir kapanış, a = 'bazı dizgenin' değeri atanır. Bu yeni değerin diğer tüm kapanışlar için erişilebilir olmasını istiyorum. teşekkürler – OK999

+0

Gerçekten mi? –

+0

'u denemek ve düzeltmek zorunda olduğunuzda kendinizden nefret edersiniz İstenilen hesaplanan değeri döndüren ve Groovy 1'de yeni şeyler kullanmak için gereken – OK999

1

Tüm OO dilleri gibi, Groovy'nin kendi başına "global" kavramı yoktur (BASIC, Python veya Perl'den farklı olarak).

aynı değişkeni paylaşmaya gerek çeşitli yöntemler, bir alanı kullanabilirsiniz varsa:

30
class Globals { 
    static String ouch = "I'm global.." 
} 

println Globals.ouch 
0

istediğiniz, ancak böyle bir şey ne gerek anlamaya olamaz mı? :

​def a = { b -> b = 1 } 
​bValue = a() 
println b // prints 1 

Şimdi bValue kapatma a bir değişkendir b değerini içerir. Artık bValue ile bir şey yapabilirsiniz Sorunuzu yanlış anlamışsam bana bildirin

131

Groovy komut dosyasında kapsam belirleme beklenenden farklı olabilir. Bunun nedeni, Groovy betiğinin kendi başına kodu çalıştıracak bir yönteme sahip bir sınıf olmasıdır, ancak hepsi bu çalışma zamanıdır. Komut dosyasına kapsamlandırılacak bir değişkeni ya tür tanımını atlayarak ya da Groovy 1.8'de @Field ek açıklamasını ekleyerek tanımlayabiliriz.

import groovy.transform.Field 

var1 = 'var1' 
@Field String var2 = 'var2' 
def var3 = 'var3' 

void printVars() { 
    println var1 
    println var2 
    println var3 // This won't work, because not in script scope. 
} 
+2

+1'i kullanan bir kapatma oluşturmayı bitirdim.8: D –

+20

Sadece bir alanın aktarıldığını not etmek .. import groovy.transform.Field – khylo

+0

komik, ilk satırda değiştirmek için düzenlemek için çalıştı, SO bir altı-char düzenleme istiyor! – JimLohse

1

Sanırım sınıf düzeyi değişkenleri hakkında konuşuyorsunuz. Yukarıda da belirtildiği gibi, global değişken/sınıf düzeyi değişkenleri kullanmak iyi bir uygulama değildir.

Gerçekten kullanmak istiyorsanız. Etkilenmeyeceğinden eminseniz ...

Herhangi bir değişkeni yöntemin dışında belirtin. değişken türü üzerinden sınıf düzeyinde

örn:

{ 
    method() 
    { 
     a=10 
     print(a) 
    } 

// def a or int a wont work 

a=0 

} 
burada
+0

Temiz bir yaklaşım olmayabilir, ama işe yarıyor;) teşekkürler. –

1
def sum = 0 

// This method stores a value in a global variable. 
def add = 
{ 
    input1 , input2 -> 
    sum = input1 + input2; 
} 

// This method uses stored value. 
def multiplySum = 
{ 
    input1 -> 
     return sum*input1; 
} 

add(1,2); 
multiplySum(10); 
2
def iamnotglobal=100 // This will not be accessible inside the function 

iamglobal=200 // this is global and will be even available inside the 

def func() 
{ 
    log.info "My value is 200. Here you see " + iamglobal 
    iamglobal=400 
    //log.info "if you uncomment me you will get error. Since iamnotglobal cant be printed here " + iamnotglobal 
} 
def func2() 
{ 
    log.info "My value was changed inside func to 400 . Here it is = " + iamglobal 
} 
func() 
func2() 

iamglobal değişken yeniden kullanılabilir fonk sonra ve kullandığı global bir değişkendir FUNC2 için

İlgili konular