2017-04-14 2 views
0

Ich bin neu zu groß und ein paar Dinge von Gradle verwirrt mich. Einige Dinge erscheinen als inkonsistente Codierung/Konfigurationsstil.Warum sind die Konfigurationsstile inkonsistent?

Wenn wir beispielsweise das Repository als jcenter oder mavencentral konfigurieren, rufen wir eine Funktion/Methode auf, z. jcenter.

repositories { 
    jcenter() 
} 

In der gleichen Datei, wenn wir versuchen, eine Abhängigkeit zu konfigurieren, rufen wir Funktionen/Methoden nicht mehr auf.

dependencies { 
    classpath 'com.android.tools.build:gradle:2.3.1' 
} 

Und dann gibt es eindeutig Variablen immer Werte

productFlavors { 
    prod { 
     versionName = "1.0-paid" 
    } 
    mock { 
     versionName = "1.0-free" 
    } 
} 

Ich bin sicher, dass ein Grund für diese wahrgenommen inconcistency gibt es aber konnte nichts finden, wenn ich durch die Dokumentation zu lesen. Kann jemand den Grund erklären?

Antwort

2

Eigentlich sind diese Beispiele nicht so verschieden.

ist auch ein Funktionsaufruf. Groovy (die Sprache, in der Gradle-Build-Skripte geschrieben werden) ermöglicht es Ihnen, in vielen Fällen die Klammer um die Argumente herum wegzulassen.

+0

Danke. Das hilft. –

2

Dies ist die Flexibilität (ich bevorzuge das zur Inkonsistenz), die von Groovy die Sprache geliefert wird, die Gradle verwendet. In Groovy können Sie eine Funktion/Methode mit oder ohne Klammern aufrufen, wenn auf ihren Namen passende Argumente folgen, aber wenn keine Argumente vorhanden sind, müssen Sie Klammern hinzufügen, um sie zu einer Funktion zu machen und sie von der Closure zu unterscheiden . Hier ist ein Beispiel mit groovysh

groovy:000> def a(){println "a"} 
===> true 
groovy:000> a 
===> [email protected] 
groovy:000> a() 
a 
===> null 
groovy:000> def b(arg){println arg} 
===> true 
groovy:000> b 
===> [email protected] 
groovy:000> b "argument" 
argument 
===> null 
groovy:000> b("argument") 
argument 
===> null 
groovy:000> 
+0

Sehr hilfreich. Nun, da ich weiß, dass Methodenaufrufe in Groovy anders aussehen können (mit/ohne Klammern), kann ich Ähnlichkeiten in dem sehen, was früher für mich anders aussah. Es sind jedoch immer noch einige Werte zum Abrufen von Variablen anstelle von Methodenaufrufen mit Parametern festgelegt. Irgendein Kommentar dazu? –

+0

Nicht sicher, was Sie ohne ein solides Beispiel meinen. Die Zuweisung einer Variablen wird durch die Verwendung von '=' - assign operator klar unterschieden. Wenn kein '=' vorhanden ist, muss ein Methodenaufruf erfolgen. Allerdings gibt es eine Wendung. Wenn '=' mit Feldern verwendet wird, ruft groovy einen Setter auf, falls einer existiert. Bitte beachten Sie dies als Beispiel https://gist.github.com/anonymous/a1077e23489a9ea51813f87ad256dad6 –

Verwandte Themen