我为什么要使用lambda / proc?解释它的重要性

时间:2014-11-11 20:19:50

标签: ruby ruby-on-rails-3 ruby-on-rails-4

我是ruby的新手,在学习它的同时,我不理解lambdas或procs的概念。我知道lambda和proc是绑定到一组局部变量的代码块。但我不明白它们的用途。

所以

程序员从中获得了什么优势?

我过去曾问过这个问题并被标记为重复,并且给出了一个完全无关的答案,所以请在将其标记为重复或责骂我之前请先查看其他链接的答案。

1 个答案:

答案 0 :(得分:0)

这是一个广泛的问题。你基本上要问"闭包为什么重要?"。我想到的两个用途是:

免责声明:我实际上并没有运行任何此类代码,但它应该明白这一点。

  1. 延迟执行代码。如果我想传递一些代码作为回调(例如Rails' after_create),我可以使用一个闭包来" hook"通过一个块进入Rails。该块具有当前类的上下文,但在Rails这样说之前它不需要运行。

    class SuperClass
      def self.after_create(&block)
        @__after_create = block
      end
    
      def self.create
        # do normal create logic
        instance = self.new
        if @__after_create
          @__after_create.call(instance)
        end
      end
    end
    
    class MyClass < SuperClass
      after_create {|instance| instance.log}
    
      def log
        puts 'hello world!'
      end
    end
    
    MyClass.create
    
  2. 将函数作为参数传递。这样可以更容易地执行诸如编写通用树遍历算法之类的操作,该算法只将树的每个节点传递给某个函数:

    def Tree.elements
      ["hello", "world!"]
    end
    
    def Tree.traverse(&block)
      elements.each {|el| block.call(el)}
    end
    
    Tree.traverse {|el| puts el} # "hello" "world!"
    Tree.traverse {|el| puts el.size} # "5" "6"