Proc와 람다
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 19번째.
블록은 객체가 아니므로 변수에 저장할 수 없습니다. 전달하고, 저장하고, 나중에 호출할 수 있는 코드 조각이 필요한 경우, 이를 Proc 또는 lambda로 감싸서 사용합니다.
Proc는 Proc.new 또는 proc 키워드로 생성합니다. .call을 사용하여 호출합니다:
double = proc { |n| n * 2 }
puts double.call(5) # 10
puts double.call(7) # 14lambda는 유사하지만 더 엄격하여, 올바른 개수의 인자가 전달되었는지 확인합니다. 화살표 형태인 ->가 흔히 사용되는 표기법입니다:
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을 사용하세요.
챌린지
쉬움하나의 숫자를 받아 3을 곱한 값을 반환하는 tripler라는 이름의 `lambda`를 생성하세요.
그런 다음 쉼표로 구분된 정수 목록을 읽고, 다음을 별도의 줄에 출력하세요:
tripler.call(10)을 호출한 결과map(&tripler)를 사용해 3배가 되고,로 연결된 입력 숫자들
입력이 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로 맵하고 ", "로 조인
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.