Menu
Coddy logo textTech

Procki i lambdy

Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 19 z 56.

Blok nie jest obiektem, nie możesz przechowywać go w zmiennej. Jeśli chcesz mieć fragment kodu, który możesz przekazywać dalej, zapisywać i wywoływać później, opakuj go w Proc lub lambda.

Obiekt Proc tworzy się za pomocą Proc.new lub słowa kluczowego proc. Wywołaj go za pomocą .call:

double = proc { |n| n * 2 }
puts double.call(5)   # 10
puts double.call(7)   # 14

Lambdy są podobne, ale bardziej rygorystyczne — sprawdzają, czy przekazujesz odpowiednią liczbę argumentów. Zapis ze strzałką -> jest powszechnie używany:

square = ->(n) { n * n }
puts square.call(4)   # 16
puts square.(4)       # 16  (skrócony zapis .call)

Obie można przekazać do metody oczekującej bloku, poprzedzając je znakiem &:

[1, 2, 3].map(&double)   # [2, 4, 6]
[1, 2, 3].map(&square)   # [1, 4, 9]

Użyj lambdy, gdy chcesz bardziej rygorystycznego sprawdzania argumentów; użyj obiektu Proc, gdy chcesz lżejszego i bardziej tolerancyjnego działania.

challenge icon

Wyzwanie

Łatwy

Utwórz lambdę o nazwie tripler, która przyjmuje jedną liczbę i zwraca ją pomnożoną przez 3.

Następnie wczytaj listę liczb całkowitych rozdzielonych przecinkami i wypisz w osobnych wierszach:

  1. Wynik wywołania tripler.call(10)
  2. Liczby wejściowe pomnożone przez 3 (użyj map(&tripler)) i połączone za pomocą ,

Dla wejścia 1,2,3 wynikiem jest:

30
3, 6, 9

Spróbuj swoich sił

# TODO: zdefiniuj `tripler` jako lambdę

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: w wierszu 1 wypisz tripler.call(10)
# TODO: w wierszu 2 przekształć numbers za pomocą &tripler, połącz separatorem ", "
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Ruby online