Ponieważ widziałem wiele pytań z pytaniami dotyczącymi gry w golfa w ich interesującym języku, postanowiłem zapytać o mój ulubiony język: Groovy. Ludzie mogą dać kilka wskazówek i wskazówek, które zostaną wykorzystane w grze w golfa z Groovy.
Ponieważ widziałem wiele pytań z pytaniami dotyczącymi gry w golfa w ich interesującym języku, postanowiłem zapytać o mój ulubiony język: Groovy. Ludzie mogą dać kilka wskazówek i wskazówek, które zostaną wykorzystane w grze w golfa z Groovy.
Odpowiedzi:
Jestem nowy w tej całej grze w golfa, oto co do tej pory mam:
Użyj zamknięć nie działa:
def a (b) {drukuj b}
jest dłuższy niż
a = {wydrukuj}
Możesz użyć ujemnego indeksu w tablicach i listach jako aliasu dla size () -
c = „abc” d = [„a”, „b”, „c”] assert c [c.size () - 1] == c [-1] potwierdź c [c.size () - 2] == c [-2] potwierdź d [d.size () - 1] == d [-1] assert d.last () == d [-1]
Operator rozprzestrzeniania jest skrótem do zbierania:
assert d * .size () == d.collect {it.size ()}
Do sortowania użyj operatora statku kosmicznego:
e = [54,5,12]
assert e.sort{a,b->a<=>b}==e.sort{a,b->a<b?-1:+1}
assert e.sort{a,b->a<=>b}==e.sort{a,b->if (a>b) {return(-1)} else {return(+1)}}
Edytuj konwersje:
assert "123" as int == "123".toInteger()
*.X
operator rozkładania może być często zapisany jako.X
Ponieważ Groovy jest dość gadatliwym językiem, możesz użyć Groovys MOP, aby skrócić wywołania metod.
Na przykład następujący fragment kodu spłaci się po czwartym użyciu:
''.metaClass.r<<{i->(int)Math.random()*i}
''.r(12)
Wskazówka dotycząca gry w golfa:
0.metaClass.r<<{i->(int)Math.random()*i}
0.r(12)
Lub wiesz:
r={(int)Math.random()*it}
r(12)
grep
jest krótki i działa na kilka problemówpobierz znaki łańcucha jako listę ze spacjami i bez elementów wiodących: 'ABC XYZ'.grep()
zwraca[A, B, C, , X, Y, Z]
grep z regexp jest krótszy niż konwersja na duże litery, jeśli jest to wymagane: it.grep(~/(?i)$c/)
zamiastit.toUpperCase().grep(c)
'ABC XYZ'as Set
jest o jedną postać krótszy i działa w większości tych samych miejsc
Uzyskiwanie tablicy z listy obiektów
Jeśli masz listę obiektów takich jak:
def users = [[user:'A',id:1],[user:'B',id:2],[user:'C',id:3]]
Możesz wygenerować ArrayList z określoną właściwością, używając:
def userIds = users*.id // [1, 2, 3] no explicit loops!
BONUS: Groovy ... na szynach!
Cóż, w Grails Framework musimy uzyskać wiele wartości z wyboru z wieloma atrybutami . Możesz używać pętli, spłaszczać i programować bardziej typowe struktury, ale możesz zapisać niektóre linie. Jeśli masz wybór jak:
<select id="users" multiple="true" name="users">
<option value="193">User A</option>
<option value="378">User B</option>
<option value="377">User C</option>
</select><%-- No Grails tags for now --%>
Następnie w kontrolerze możesz po prostu napisać:
def aListOfUsers = User.getAll(params.list('userIds'))