티스토리 뷰
Blocks
블록은 클로저 혹은 익명함수와 비슷합니다. 즉 이름 없는 메서드를 생성하는 방법이라고 할 수 있으며, do...end 혹은 {} 로 정의합니다.
블록은 처리를 하나의 단위로 묶은 것으로, 메서드 호출 시 한번만 지정할 수 있는 인자의 일종입니다. 이런 메서드 호출을 블록 메서드 호출이라고 합니다.
리시버.메소드명(args) do |param| action end
object.method { |placeholder| action }
# File#open 메서드 예시
File.open("readme.md") do |file|
pusts file.read
end
# Array#each 메서드 사용 예시 - 블록을 파라미터로 받음
my_array = [1, 2, 3, 4, 5]
my_array.each do |n|
n *= n
puts n
end
# ==> 1, 4, 9, 16, 25 출력
Yield
메서드 호출시 block의 표현식은 호출된 메서드의 yield로 전달됩니다. 즉, 메서드 내부에 yield가 있을 경우, 메서드 호출시 block을 공급해야 합니다.
# yield 사용법
def check_yield
puts "before yield"
yield
puts "after yield"
end
check_yield { puts "block" }
## 결과
# before yield
# block
# after yield
# 파라미터가 있는 yield
def check_yield_with_param(item)
puts "before yield"
yield(item)
puts "after yield"
end
check_yield_with_param("block") { |item| puts "#{item}" }
메소드에 블록이 부여되었는지 판단하기 위해 block_given? 메서드를 사용합니다.
# block_given? 은 메소드가 블록을 인수로 호출한 경우 true를 반환
def block_given_sample
puts "before yield"
yield if block_given?
puts "after yield"
end
# 블록이 없을 경우
block_given_sample #=> "before yield" "after yield"
# 블록을 지정할 경우
block_given_sample do
puts "block"
end #=> "before yield" "block" "after yield"
'Ruby & Rails' 카테고리의 다른 글
Ruby 처음 배우기 : 상속 (0) | 2018.05.11 |
---|---|
Ruby 처음 배우기 : Class (0) | 2018.05.11 |
Ruby 처음 배우기 : 메서드 (0) | 2018.05.10 |
Ruby 처음 배우기 : 반복문 (1) | 2018.05.10 |
Ruby 처음 배우기 : 조건문 (0) | 2018.05.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- xmind
- quirky
- javascript
- db
- Git
- mongoDB
- 방수방진
- MonGo
- 윈도우 10
- 캡쳐프로그램
- 다음팟플레이어
- 마인드맵
- 아이폰 7
- 갤럭시 노트 7
- 루비
- 몽고DB
- database
- 깃
- 마크다운
- ruby
- 데이터베이스
- MySQL
- 압축프로그램
- 반디집
- 픽픽
- 자바스크립트
- GitHub
- js
- Nas
- 샤오미
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함