Đây là những gì tôi đang cố gắng để làm:Ruby - Có thể truyền một khối như một tham số như một khối thực tế cho một chức năng khác?
def call_block(in_class = "String", &block)
instance = eval("#{in_class}.new")
puts "instance class: #{instance.class}"
instance.instance_eval{ block.call }
end
# --- TEST EXAMPLE ---
# This outputs "class: String" every time
"sdlkfj".instance_eval { puts "class: #{self.class}" }
# This will only output "class: Object" every time
# I'm trying to get this to output "class: String" though
call_block("String") { puts "class: #{self.class}" }
Trên dòng mà nó nói "instance.instance_eval {block.call}", tôi đang cố gắng để tìm một cách khác để làm cho các biến thể hiện mới chạy dụ eval trên khối. Cách duy nhất tôi có thể nghĩ đến để làm cho nó làm điều đó là vượt qua instance_eval khối ban đầu, không phải là một biến hay bất cứ thứ gì, nhưng là một khối thực như trong ví dụ kiểm tra.
Bất kỳ mẹo nào?
Cái gì ??? Nó thật đơn giản? Hahaha cảm ơn! Tôi đã bị mắc kẹt trên này một ngày! :) –
thuật ngữ tìm kiếm là 'tham số khối'; dễ dàng hơn trong hindsight mặc dù :) – Gishu