Menu
Coddy logo textTech

Procs와 Lambdas

Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨. 56개 중 19번째.

블록은 객체가 아니므로 변수에 저장할 수 없습니다. 전달하고, 저장하고, 나중에 호출할 수 있는 코드 조각이 필요할 때는 이를 Proc 또는 lambda로 감쌉니다.

Proc.new 또는 proc 키워드를 사용하여 Proc를 만듭니다. .call로 호출합니다:

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

lambda는 비슷하지만 더 엄격하며, 올바른 개수의 인수를 전달하는지 확인합니다. 화살표 형식인 ->이 일반적인 표기입니다:

square = ->(n) { n * n }
puts square.call(4)   # 16
puts square.(4)       # 16  (.call의 단축 표기)

둘 다 &를 앞에 붙여 블록을 기대하는 메서드에 전달할 수 있습니다:

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

더 엄격한 인수 검사를 원할 때는 lambda를 사용하고, 더 가볍고 관대한 동작을 원할 때는 Proc를 사용하세요.

challenge icon

챌린지

쉬움

숫자 하나를 받아 3을 곱한 값을 반환하는 tripler라는 람다를 만드세요.

그런 다음 쉼표로 구분된 정수 목록을 읽고, 다음을 각각 별도의 줄에 출력하세요.

  1. tripler.call(10)을 호출한 결과
  2. 입력된 숫자에 3을 곱한 값(map(&tripler) 사용)을 , 로 연결한 결과

입력이 1,2,3이면 출력은 다음과 같습니다.

30
3, 6, 9

직접 해보기

# TODO: `tripler`를 람다로 정의

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

# TODO: 1행, tripler.call(10) 출력
# TODO: 2행, numbers를 &tripler로 맵하고 ", "로 조인
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨

직접 연습해 보세요: 온라인 Ruby 컴파일러