gpt4 book ai didi

ruby - 在 Ruby 中访问传递的 block

转载 作者:太空宇宙 更新时间:2023-11-03 17:39:44 29 4
gpt4 key购买 nike

我有一个接受 block 的方法,我们称它为外部。它依次调用一个接受另一个 block 的方法,称之为 inner。

我希望发生的事情是让外部调用内部,向它传递一个调用第一个 block 的新 block 。

这是一个具体的例子:

class Array
def delete_if_index
self.each_with_index { |element, i| ** A function that removes the element from the array if the block passed to delete_if_index is true }
end
end

['a','b','c','d'].delete_if_index { |i| i.even? }
=> ['b','d']

传递给 delete_if_index 的 block 由传递给 each_with_index 的 block 调用。

这在 Ruby 中是否可能,更广泛地说,我们对接收它的函数中的 block 有多少访问权限?

最佳答案

您可以将一个 block 包裹在另一个 block 中:

def outer(&block)
if some_condition_is_true
wrapper = lambda {
p 'Do something crazy in this wrapper'
block.call # original block
}
inner(&wrapper)
else
inner(&passed_block)
end
end

def inner(&block)
p 'inner called'
yield
end

outer do
p 'inside block'
sleep 1
end

我想说打开一个现有的 block 并更改其内容是错误的TM,也许连续传递在这里会有所帮助?我还要小心传递有副作用的 block ;我尝试保持 lambda 的确定性,并执行诸如删除方法主体中的内容之类的操作。在复杂的应用程序中,这可能会使调试变得容易得多。

关于ruby - 在 Ruby 中访问传递的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7470446/

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