Jestem nowy w programowaniu. Czy ktoś może wyjaśnić, co .map
by zrobił w:
params = (0...param_count).map
ruby
map
range
enumeration
bigpotato
źródło
źródło
map
jest powszechną „funkcjonalną” metodą znajdującą się na obiektach policzalnych używanych do przekształcania wartości w sekwencji (ze szczególnym uwzględnieniem)...
i...
są sposobami tworzenia zakresów. Również zapoznać się z REPL, gdzie można spróbować tej rzeczy z siebie! :)Odpowiedzi:
map
Metoda bierze przeliczalny obiekt i blok i uruchamia blok dla każdego elementu, wyprowadzanie każdy zwracanej wartości z bloku (oryginalny obiekt pozostaje niezmieniona, chyba że używaszmap!)
:Array
iRange
są typami wymiennymi.map
z blokiem zwraca tablicę.map!
mutuje oryginalną tablicę.Gdzie to jest pomocne i na czym polega różnica
map!
ieach
? Oto przykład:Wyjście:
źródło
map
tak, jakby to byłomap!
map
wraz zselect
ieach
jest jednym z koni Ruby w moim kodzie.Pozwala uruchomić operację na każdym obiekcie tablicy i zwrócić je wszystkie w tym samym miejscu. Przykładem może być zwiększenie tablicy liczb o jeden:
Jeśli możesz uruchomić jedną metodę na elementach tablicy, możesz to zrobić w skrócie:
Aby to zrobić w powyższym przykładzie, musisz zrobić coś takiego
Aby po prostu użyć techniki ampersand i skrótu, użyjmy innego przykładu:
Przekształcanie danych w Rubim często wiąże się z kaskadą
map
operacji. Studiujmap
iselect
są to jedne z najbardziej przydatnych metod języka Ruby w bibliotece podstawowej. Są tak samo ważne jakeach
.(
map
jest także pseudonimemcollect
. Użyj tego, co działa najlepiej dla Ciebie koncepcyjnie).Więcej przydatnych informacji:
Jeśli obiekt Enumerable, na którym pracujesz
each
lubmap
na którym znajduje się zawiera zestaw elementów Enumerable (skróty, tablice), możesz zadeklarować każdy z tych elementów w rurach blokowych w następujący sposób:W przypadku Hash (także
Enumerable
obiekt, Hash to po prostu tablica krotek ze specjalnymi instrukcjami dla interpretera). Pierwszy „parametr rury” jest kluczem, drugi to wartość.Aby odpowiedzieć na aktualne pytanie:
Zakładając, że
params
jest to skrót, byłby to najlepszy sposób na zmapowanie go: Użyj dwóch parametrów bloku zamiast jednego, aby uchwycić parę klucz i wartość dla każdej interpretowanej krotki w skrócie.źródło
NoMethodError: private method 'plusone' called for 1:Fixnum
ruby 2 i „złą liczbę argumentów” w ruby 1.9 / 1.8. Zresztą, kiedyś lambda:plusone = ->(x) { x + 1 }
następnie wyjąć specyfikator symbol:[1,2,3].map(&plusone)
.private
wewnątrz klasy, w której umieściłeś metodę przed jej zastosowaniemUżywając Ruby 2.4 możesz zrobić to samo, używając
transform_values
tej funkcji wyodrębnionej z szyn na ruby.źródło
0..param_count
oznacza „do param_count włącznie”.0...param_count
oznacza „do, ale bez param_count”.Range#map
nie zwraca anEnumerable
, faktycznie mapuje go na tablicę. To jest tak samo jakRange#to_a
.źródło
„Mapuje” funkcję do każdego elementu w
Enumerable
- w tym przypadku - zakresie. Wywołałby więc blok przekazany raz dla każdej liczby całkowitej od 0 doparam_count
(wyłącznie - masz rację co do kropek) i zwraca tablicę zawierającą każdą zwracaną wartość.Oto dokumentacja dla
Enumerable#map
. Posiada również aliascollect
.źródło
Range#map
rzeczywistości konwertuje je na tablicę.Enumerable
, jak każda z nich. Myślałem, że tak.Mapa jest częścią wymiennego modułu. Bardzo podobny do „zbierać” Na przykład:
Mapa zapewnia wartości iterujące po tablicy, które są zwracane przez parametry bloku.
źródło
#each
#each
uruchamia funkcję dla każdego elementu w tablicy. Poniższe dwa fragmenty kodu są równoważne:#map
#map
stosuje funkcję do każdego elementu tablicy, zwracając wynikową tablicę. Następujące są równoważne:#map!
#map!
jest podobny#map
, ale modyfikuje tablicę na miejscu. Następujące są równoważne:źródło