代码之家  ›  专栏  ›  技术社区  ›  user9489003

ruby中proc的参数

  •  0
  • user9489003  · 技术社区  · 7 年前

    我正在尝试运行此代码。我试图将参数传递到内部过程,但我的代码因此无法运行。我做错了什么?

    def log (descriptionOfProc,proc)
      puts "I have started proc #{descriptionOfProc}"
      puts "#{descriptionOfProc} is finished, returning #{proc.call}"
    end
    
    inner=Proc.new do |x,y|
      x+y
    end
    
    middle=Proc.new do |x| 
      log("inner", inner[1, 2])
      "check2"
    end
    
    outer=Proc.new do |x| 
      log("middle", middle)
      "check3"
    end
    
    puts log("outer", outer)
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Leo Correa    7 年前

    当你打电话的时候 inner[1,2] 在…内 middle proc,您实际上正在执行返回值的函数 3 那么 log 将是 "inner", 3 由于3没有响应 call 您的脚本失败。

    如果要修复脚本,中间过程应该如下所示

    middle=Proc.new do |x| 
      log("inner", -> { inner[1, 2] })
      "check2"
    end
    

    代码不工作的原因是因为您正在执行函数 inner 具有 [] 。可以用不同的方式在ruby中执行块 .call ,则, .yield ,则, .() ,则, [] 。正如您所看到的,您传递的是内部的结果,而不是过程本身。通过将呼叫包装到 内部[1,2] 在稍后将在内部执行的另一个块中 日志 通过这样做 proc.call ,您延迟了内部的执行。