2013-03-02 27 views
45

Jestem nowy, aby uzyskać stopnie i obecnie staram się podążać za tutorialami i kilka razy widziałem wymieszane pojedyncze i podwójne cudzysłowy. Chciałem tylko wiedzieć, czy jest jakaś różnica, kiedy jeden zestaw powinien być używany w stosunku do drugiego. Przykładem tego jest sekcja 6.12 z samouczka - Default tasks:Gradle Single vs Double Quotes

defaultTasks 'clean', 'run' 

task clean << { 
    println 'Default Cleaning!' 
} 

task run << { 
    println 'Default Running!' 
} 

task other << { 
    println "I'm not a default task!" 
} 

Tak, chciałbym tylko wiedzieć, czy należy zwrócić uwagę na te różnice lub jeśli są inter-changeable i mogę użyć jedno- lub podwójne cudzysłowy przy drukowaniu ciągów w gradle.

Odpowiedz

51

Gradle budować skrypty są napisane w Groovy. Groovy ma zarówno cytowane w podwójnym cudzysłowie, jak i pojedyncze cytaty z ciągów. Główną różnicą jest to, że podwójnie cytowany literały łańcuchowe wspierać interpolacji wyrażenie:

def x = 10 
println "result is $x" // prints: result is 10 

można dowiedzieć się więcej o interpolację Groovy String w this lub innych Groovy artykułów w sieci.

+1

Dzięki za jasne wyjaśnienie. Ale teraz mam pytanie uzupełniające, czy jest jakikolwiek powód, aby nie zawsze używać podwójnych cytatów? –

+1

Głównie subiektywne/sytuacyjne, takie jak "wygląda lepiej", "używane do tego stylu z innego języka", "chcą używać literału' $ 'lub' "' bez konieczności ucieczki od nich "," łatwiejsze do wpisania ". Wielu użytkowników Groovy wydają się preferować pojedyncze cudzysłowy domyślnie wolę podwójne cudzysłowy, ponieważ pozwalają mi dodawać/usuwać interpolację ciągów bez zmiany cudzysłowów, a także jestem przyzwyczajony do podwójnych cytatów z języków takich jak Java. –

11

Tak, możesz użyć jednego lub drugiego. Jedyną różnicą jest to, że podwójnie cytowany łańcuchy mogą być GStrings, które mogą zawierać oceniane wyrażeń jak w poniższym przykładzie pobranej od the Groovy documentation:

foxtype = 'quick' 
foxcolor = ['b', 'r', 'o', 'w', 'n'] 
println "The $foxtype ${foxcolor.join()} fox" 
// => The quick brown fox 
+0

Dwulitrowe ciągi literowe to 'GString's, które zawierają' $ '. W przeciwnym razie są one proste 'String's. –

+0

Dzięki za poprawkę. Zaktualizowałem swoją odpowiedź. –