簡體   English   中英

在不執行第一個的情況下,在Ruby中調用帶有一個塊的塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM