【问题标题】:The Proc behave different in different scopeProc 在不同的范围内表现不同
【发布时间】:2022-11-14 01:59:31
【问题描述】:

我是 ruby​​ 的新手并开始学习 ruby​​,我来到了这个 proc return 概念,我完全混淆了 proc 如何以不同的方式返回。

我在这里附上我的代码以供参考。 我也进行了谷歌搜索,但如果有人可以提供帮助,我无法得到答案。

def call_proc
    puts "Before proc"
    my_proc = Proc.new { return 2 }
    my_proc.call
    puts "After proc"
  end

  def proc_call
    def inside_call
        my_proc = Proc.new {return 4}
    end
    proc = inside_call
    proc.all
end

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    我看不出这 2 段代码的区别……但是,这一切似乎都在按预期的方式工作。 Procs 无论您如何称呼它们,都以相同的方式工作。

    见:https://www.codecademy.com/learn/learn-ruby/modules/learn-ruby-blocks-procs-and-lambdas-u/cheatsheethttps://www.rubyguides.com/2016/02/ruby-procs-and-lambdas/#Lambdas_vs_Procs

    您的代码(和我的输出):

    def call_proc
      my_proc = Proc.new { return 2 }
    
      puts "Before proc"
      my_proc.call
    puts "After proc"
    end
    
    def proc_call
      def inside_call
        my_proc = Proc.new {return 4}
      end
      proc = Proc.new {return 4}
    
      puts "Before proc"
      proc.call
      puts "After proc"
    end
    

    输出:

    2.7.2 :112 > call_proc
    Before proc
     => 2
    2.7.2 :113 > proc_call
    Before proc
     => 4
    2.7.2 :114 >
    

    相比之下,如果您想在Proc 之后继续,您最好执行Lambda

    def call_lambda
      my_lambda = -> { return 17 }
    
      puts "Before lambda"
      puts my_lambda.call
      puts "After lambda"
    end
    

    (注意调用前的puts,以及nil的返回值)

    2.7.2 :122 > call_lambda
    Before lambda
    17
    After lambda
     => nil
    

    【讨论】:

      猜你喜欢
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      相关资源
      最近更新 更多