[英]Calling a block withing a block in ruby without executing the first
我正在將塊傳遞給方法以延遲執行,例如
a = Proc.new do
puts "call me later"
end
假設我正在用它來緩存昂貴的電話。 現在說我現在不想運行部分代碼,而稍后要運行類似的代碼
a = Proc.new do |c|
puts "call me later"
c.some_method do
puts "call me now"
end
end
一旦有了對象a
就可以獲取“立即call me now
”的輸出,而無需調用代碼以輸出“ call me later
”?
我不確定您到底要完成什么,但是您擁有的是一個Proc,它希望將一個對象作為參數傳遞,並且該對象具有接受塊的方法。
module ModB
def self.some_method
puts 'some_method before yield'
yield
puts 'some_method after yield'
end
end
proc_a = Proc.new do |b|
puts 'proc_a called'
b.some_method do
puts 'block called'
end
end
proc_a.(ModB)
# proc_a called
# some_method before yield
# block called
# some_method after yield
因此,proc_a要么需要某種標志
proc_a = Proc.new do |run_me, b|
puts 'proc_a called' if run_me
b.some_method do
puts 'block called'
end
end
或者,您應該單獨存儲some_method的塊。
proc_a = Proc.new do
puts 'proc_a called'
end
proc_b = Proc.new do
puts 'block called'
end
proc_a.()
# proc_a called
ModB.some_method(&proc_b)
# some_method before yield
# block called
# some_method after yield
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.