gpt4 book ai didi

ruby - block 是否作为参数传递?

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

我可以像这样将参数传递给函数:

func 1, 2, 3

或者我可以使用像这样的括号:

func(1, 2, 3)

后来我了解了像 list.each 这样的函数,我传递(不确定这是否是真正发生的事情)一个 block 来对每个元素进行操作:

list.each {|x| puts x}

我假设这只是将 block 作为参数传递给 each 函数,但事实并非如此,因为:

list.each( {|x| puts x} )

不起作用。

显示时我意识到了这一点:

5.upto(9) {|x| puts x}

如果 block 只是一个参数,那根本就没有意义。

这是怎么回事?您可以向我指出任何资源来帮助解释这一点,也许还有其他不是很明显的结构?

最佳答案

block 确实有点特殊,但也可以用作参数。考虑这个函数:

def greet
yield "Hello"
end

greet{ |greeting| puts "#{greeting} to you" }

你也可以像这样写完全相同的东西:

def greet(&block)
block.call("Hello")
end

greet{ |greeting| puts "#{greeting} to you" }

# which is equivalent to:
my_proc = proc{ |greeting| puts "#{greeting}, nice to see you." }
greet(&my_proc)

最后, block 是一种特殊形式的 procs,具有特殊的语法,这使得它们更有用。但是您仍然可以访问过程并传递它们。

关于ruby - block 是否作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16820662/

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