加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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作为块传递给函数,则必须在其前面加上&amp ;.定义接受块参数的函数时也是如此.

使用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有很多方法可以创造.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读