Block là một đoạn code ẩn danh truyền cho method, không phải object, không gán vào biến được.
- Viết bằng
{}(1 dòng) hoặcdo...end(nhiều dòng). - Method gọi block bằng
yield.
ruby
def greet
puts "Before"
yield # gọi block
puts "After"
end
greet { puts "Hello!" }
# Before
# Hello!
# After
# yield với argument
def double(n)
yield(n * 2)
end
double(5) { |x| puts x } # => 10
# Kiểm tra block có được truyền không
def safe_call
yield if block_given?
endA block is an anonymous piece of code passed to a method — it is not an object and cannot be assigned to a variable.
- Written with
{}(single-line) ordo...end(multi-line). - A method calls the block using
yield.
ruby
def greet
puts "Before"
yield
puts "After"
end
greet { puts "Hello!" }
# Before
# Hello!
# After
# yield with argument
def double(n)
yield(n * 2)
end
double(5) { |x| puts x } # => 10
# Guard: only yield if block given
def safe_call
yield if block_given?
end