Ruby 当我们有方法时,Procs和Lambdas用于什么

Ruby 当我们有方法时,Procs和Lambdas用于什么,ruby,Ruby,我的怀疑几乎是一种误解 从我读到的内容来看,块是由{}或do和end包围的一组代码 根据我的理解,Proc或Lambda所做的是: 获取此块 将块分配给变量 也就是说;我们不需要一直重复整个块 但是,Proc、Lambda和标准的方法之间有什么区别呢?根据我的理解,它们的工作方式都是一样的。ruby中的所有东西都被视为对象Proc和lambda是基本相似的结构。就用法而言,这个话题是非常固执己见的 关键的优点是它们可以很容易地传递到其他块,并且语法简短而甜美。考虑下面的非常简单的例子: mult

我的怀疑几乎是一种误解

从我读到的内容来看,
是由
{}
do
end
包围的一组代码

根据我的理解,
Proc
Lambda
所做的是:

  • 获取此
  • 分配给
    变量
  • 也就是说;我们不需要一直重复整个


    但是,
    Proc
    Lambda
    和标准的
    方法之间有什么区别呢?根据我的理解,它们的工作方式都是一样的。

    ruby中的所有东西都被视为对象
    Proc
    lambda
    是基本相似的结构。就用法而言,这个话题是非常固执己见的

    关键的优点是它们可以很容易地传递到其他
    ,并且语法简短而甜美。考虑下面的非常简单的例子:

    multiply = Proc.new {|x,y| x*y}
    subtract = lambda {|x,y| x-y}
    add      = ->(x,y) {x+y}
    
    def do_math (opr, *b) 
      opr.each do |bloc|
        puts bloc.call(b[0],b[1])
      end
    end
    
    do_math([multiply, subtract, add], 10, 5)
     # => 50
     # => 5
     # => 15
    
    puts multiply.call(5,5)
     # => 25
    puts subtract.call(5,5)
     # => 0
    puts add.call(5,5)
     # => 10
    
    要更好地了解它们是什么,请观看以下视频:


    此外,文档中还有更多示例:

    我发现这有助于区分。

    Proc
    s(和lambdas)和方法之间有一个关键的区别<代码>过程
    是对象,方法不是。由于Ruby是一种面向对象的语言,您只能对对象进行操作,这一点非常重要

    因此,如果您想将一段代码传递给一个方法,您需要一个对象,这就是
    Proc
    s提供的


    您可以通过
    object#method
    方法获得表示方法的代理对象,该方法将返回
    method
    类的实例(duck键入
    Proc
    )。

    阅读本文-谢谢@Cary,但事实上我确实了解Procs和Lambdas。我要问的只是为什么要使用它们而不是使用方法。它不是做了完全相同的事情吗?如果我正确理解了你的问题,那么最好把它框成这样:“我理解过程、lambda和方法之间的区别,但考虑到它们都做几乎相同的事情,我不明白什么时候应该使用一个而不是使用另外两个。有没有指导方针可以帮助我理解这一点?“天哪,我觉得那支细箭很难看。谁能解释一下我没有看到的背后的逻辑和美吗?@kal,美是旁观者的眼睛。你有权这么想。我个人喜欢并欣赏这种简洁。我知道它是干什么的,它只有两个字<代码>->
    我也更喜欢
    我更喜欢
    @Kal我知道你在说什么。但这都是关于透视的。可以把它看作是用
    参数刺伤
    ,因此
    刺伤lambda
    :)我记得几年前读过(也许是在《为什么(辛辣的)Ruby指南?》时,我认为竖条是一个滑槽,通过它,论点滑下并进入到块中。不知怎的,这对我来说还是比刺伤羔羊更好!但我离题了,这是我认为在这些评论中不应该做的事。:-)如果你真的发布一个答案,这将是很有帮助的。链接到其他人的答案而不至少在自己的答案中进行总结是不可取的。