ruby

블록

Dexlee 2021. 12. 26. 23:04

1. 블록이란?

  • 블록은 중괄호 {} 나 do와 end 키워드로 둘러싸인 코드 덩어리다.
  • 일반적으로 한 줄에 블록을 작성할 수 있다면 중괄호를 사용하고
  • 그렇지 않으면 do와 end 키워드를 사용
  • 블록은 익명 메서드의 본문과 비슷한 무언가라고 생각해도 무방

2. 블록 사용 방법

ids = [1,2,3,4,5]
sheets = []
ids.each_slice(3) { |idxs| sheets += Sheet.where(id: idxs) }

or

ids.each_slice(3) do |idxs| 
  sheets += Sheet.where(id: idxs)
end

이렇게 두 가지 방식으로 쓸 수 있다.

each_slice() 함수의 로직을 확인해보면,

def each_slice(n)
    block_given? ? (yield to_a; nil) : [to_a].to_enum
  end

여기서 주의 깊게 보아야 할 예약어가 yield이다. 이 yield문을 한 번 호출할 때마다 블록에 있는 람다식을 실행시켜주는 역할을 한다.

그리고 만약에 블록이 존재하지 않는다면 리스트를 리턴해준다.

 

 

위에 코드를 설명해보면, 총 2개의 서브리스트 [1,2,3] , [4,5]가 람다식의 파라미터로 갈 것이고, 각 호출마다 yield문이 호출되어 람다식을 실행시킬 것이다.