2017-04-14 23 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(グラブルビルドスクリプトが書かれている言語)では、多くの場合、引数のまわりの括弧を省略することができます。

+0

ありがとうございます。それは役に立ちます。 –

2

これは、Gradleが使用している言語であるGroovyによって提供される柔軟性(私はこれが矛盾するのが好ましい)です。 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

実例がないと何を意味するのかよく分かりません。変数の代入は、 '=' - 代入演算子を使用することによって明確に区別されます。 '='がない場合は、メソッド呼び出しが必要です。 しかし、それに1つのひねりがあります。 Groovyは、フィールドに '='を使用すると、セッターが存在する場合はそのセッターを呼び出します。これを例として見てください。https://gist.github.com/anonymous/a1077e23489a9ea51813f87ad256dad6 –

関連する問題