Jeśli spojrzysz na dokumentację Enumerable#find
, zobaczysz, że akceptuje tylko jeden parametr do bloku. Powodem, dla którego można wysłać dwa, dlatego Ruby wygodnie pozwala to zrobić z bloków, na podstawie To „przypisanie równoległy” strukturze:
[[1,2,3], [4,5,6]].each {|x,y,z| puts "#{x}#{y}#{z}"}
# 123
# 456
Więc w zasadzie, każdy plony element tablicy do bloku, a ponieważ Składnia bloków ruby umożliwia "rozszerzanie" elementów tablicy na ich składniki poprzez dostarczanie listy argumentów, działa.
Możesz znaleźć więcej lew z argumentami bloków here.
a.combination(2)
daje tablicę tablic, gdzie każda z podelementów składa się z 2 elementów. Więc:
a = [1,2,3,4]
a.combination(2)
# => [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]
W rezultacie, wysyłasz jedną tablicę jak [1,2]
znaleźć na blok, a Ruby wykonuje zadania równolegle do przypisania 1 do x
i 2 do y
.
patrz także this SO pytanie, które przynosi inne wydajne przykłady przypisania równolegle, jak to stwierdzenie:
a,(b,(c,d)) = [1,[2,[3,4]]]
Zobacz tę odpowiedź - http://stackoverflow.com/a/1077751/196834 – Ash
Żeby było jasne, znaleźć trwa 1 opcjonalny argument i blok. Blok przyjmuje dwa argumenty. –
Jestem hirolau i aprobuję tę wiadomość. – hirolau