2017-04-14 46 views
0

我是新來的gradle,一些gradle讓我困惑。有些東西看起來像不一致的編碼/配置風格。爲什麼Gradle中的配置風格不一致?

例如,當我們將存儲庫配置爲jcenter或mavencentral時,我們調用一個函數/方法,例如jcenter。

repositories { 
    jcenter() 
} 

然而,在同一文件中,當我們嘗試配置的依賴,我們不調用函數/方法了。

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

然後有明確的變量獲取值

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

我相信有這樣的感覺身後inconcistency一個原因,但是當我通過文檔閱讀找不到任何東西。有誰能解釋原因嗎?

回答

2

其實這些例子並沒有那麼不同。

classpath 'com.android.tools.build:gradle:2.3.1' 

也是函數調用。 Groovy(寫Gradle構建腳本的語言)可以讓你在很多情況下在參數中省略括號。

+0

謝謝。這有幫助。 –

2

這是Groovy提供的Gradle使用的語言的靈活性(我更喜歡這種不一致性)。 在Groovy中,如果名稱後跟匹配參數,則可以調用帶有或不帶括號的函數/方法,但如果沒有參數,則必須添加括號以使其成爲對函數的調用,並使其與代表的閉包截然不同。 下面是使用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

非常有幫助。現在我知道Groovy中的方法調用可能看起來不同(帶/不帶圓括號),我想我可以看到早些時候看起來不同的相似之處。但是,仍然有一些變量獲取值,而不是帶有參數的方法調用。對此有何評論? –

+0

不確定你的意思沒有一個堅實的例子。賦值變量通過使用'=' - 賦值運算符明確區分。當沒有'='時,必須有一個方法調用。 然而,它有一個轉折點。當'='與字段一起使用時,groovy會調用setter(如果存在的話)。請看這個例子https://gist.github.com/anonymous/a1077e23489a9ea51813f87ad256dad6 –

相關問題