ruby-on-rails – 我不了解Ruby Proc背后的想法…为什么不使用普
发布时间:2020-12-17 04:04:00 所属栏目:百科 来源:网络整理
导读:我想标题就是这么说的.我正在读一本书,我可以看到它们是如何工作的,但为什么我会用正常参数创建它们而不是普通方法呢? 我搜索谷歌,所以我更加困惑. 请澄清.谢谢. 解决方法 proc是不同的,因为您可以将其存储在变量中.因此,您可以将其作为参数传递给函数,从函
我想标题就是这么说的.我正在读一本书,我可以看到它们是如何工作的,但为什么我会用正常参数创建它们而不是普通方法呢?
我搜索谷歌,所以我更加困惑. 请澄清.谢谢. 解决方法
proc是不同的,因为您可以将其存储在变量中.因此,您可以将其作为参数传递给函数,从函数返回,操作它等.
Procs,lambdas和blocks是使Ruby变得非常棒的主要因素之一.例如,它们是Ruby迭代器的核心.当你做类似的事情时: collection.each do |item| //process item end 您基本上是将一个块(一个Proc对象)传递给每个函数. 让我们说你想要以相同的方式处理的一堆数组.为了避免每次编写每个代码,您可以执行以下操作: handler = Proc.new{|item| do_something_with(item)} array1.each &handler array2.each &handler .... arrayn.each &handler 如果要将Proc作为块传递给函数,则必须在其前面加上& ;.定义接受块参数的函数时也是如此. 使用Proc的另一种有用方法是在函数中. 假设您有一个实例化对象的函数,进行一些小的更改并返回它.为了使它更灵活,你可以让它接受一个这样的块: def new_item(param1,param2,&block) my_item = Item.new my_item.attribute1 = param1 my_item.attribute2 = param2 yield my_item if block_given? return my_item end 收益是神奇发生的地方.当评估该行时,该函数将执行您使用my_item作为参数提供的块.所以你可以这样做: my_new_item = new_item(p1,p2) do |item| item.attribute3 = some_value end 现在,my_new_item将设置其attribute3以及除阻止之外的任何其他修改. 您不使用Procs和lambdas来替换函数,而是使用它们来扩充函数.您可以使用一个函数返回基于您提供的参数构建的Proc. Procs有很多方法可以创造. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |