gpt4 book ai didi

ruby-on-rails - 我不明白 Ruby Proc 背后的想法......为什么不使用普通方法?

转载 作者:数据小太阳 更新时间:2023-10-29 07:22:43 24 4
gpt4 key购买 nike

我想标题已经说明了这一点。我正在读书,我可以看到它们是如何工作的,但为什么我要创建它们而不是使用普通参数的普通方法?

我在 Google 上进行了搜索,结果我更加困惑了。

请澄清。谢谢。

最佳答案

proc 是不同的,因为您可以将它存储在变量中。因此,您可以将它作为参数传递给函数、从函数返回它、对其进行操作等。

Procs、lambda 和 block 是使 Ruby 很棒的主要因素之一。例如,它们是 Ruby 迭代器的核心。当您执行以下操作时:

collection.each do |item|
//process item
end

您基本上是将一个 block (一个 Proc 对象)传递给每个函数。

假设您有一堆数组,您希望以相同的方式处理它们。为了避免每次都编写每个代码,您可以执行以下操作:

handler = Proc.new{|item| do_something_with(item)}
array1.each &handler
array2.each &handler
....
arrayn.each &handler

当你想将一个 Proc 作为一个 block 传递给一个函数时,你必须在它之前加上一个 &。当您定义接受 block 参数的函数时也是如此。

使用 Proc 的另一种有用方式是在函数中。

假设您有一个函数可以实例化一个对象,进行一些小的更改,然后返回它。为了使其更灵活,您可以让它接受这样的 block :

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 作为参数提供的 block 。所以你可以做这样的事情:

my_new_item = new_item(p1, p2) do |item|
item.attribute3 = some_value
end

现在,my_new_item 将设置其 attribute3 以及您在 block 中所做的任何其他修改。

您不使用 Procs 和 lambda 来替换函数,而是使用它们来扩充函数。你可以有一个函数返回一个 Proc,它是根据你给它的任何参数构建的。使用 Procs 有很多方法可以发挥创意。

关于ruby-on-rails - 我不明白 Ruby Proc 背后的想法......为什么不使用普通方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6167619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com