Menu
Coddy logo textTech

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)   # 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라는 이름의 `lambda`를 생성하세요.

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

  1. tripler.call(10)을 호출한 결과
  2. 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로 맵하고 ", "로 조인
quiz icon실력 점검

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

로직 및 흐름의 모든 레슨