de
diğer bilgiler, ama ben sadece bir ova yerine, daha gerçek bir blok gibi iç blok tedavi edelim bir yaklaşım paylaşmak istedim eski argüman.
bu konuda gitmek I'in en iyi yol, bir bağlayıcı olarak olarak hareket edebilir ve bir yöntem olarak, dış blok tanımlamak için bir nesne oluşturmaktır. Ben orijinal örneği yeniden Yani eğer yerine instance_exec
çağrısının scope_object.bound_proc
çağırabilir Şimdi
scope_object = Object.new
scope_object.define_singleton_method :bound_proc, &outer_proc
bir nesne üzerinde bir yöntem olarak
inner_proc = proc { puts "inner" }
outer_proc = proc { |*args, &inner_block|
puts *args
inner_block.call
puts "bar"
}
Biz tanımlayabilirsiniz
outer_proc
... instance_exec çağrısı olmadan aşağıdaki gibi yukarıdaki.
scope_object.bound_proc 1, 2, 3, &inner_proc
Sen alırsınız:
1
2
3
inner
bar
, maalesef bir LocalJumpError alırsınız Bunun yerine inner_block.call
daha outer_proc
iç verim çalışırsanız, neden tamamen emin değilim. Birisi bu cevabı varsa o zaman ilgilenirim.
Ne yazık ki bu benim durum için çalışmaz. Mevcut bir provayı, yürütme süresini takip etmeme izin verecek şekilde şeffaf bir şekilde sarmaya çalışıyorum. Sarma işlemimin imzası üzerinde hiçbir kontrolüm olmadığından, bu yöntemi kullanamıyorum. Genel olarak bu iyi bir çalışma gibi görünüyor. – Ajedi32