gpt4 book ai didi

ruby - Ruby 中 block 和 &block 的区别

转载 作者:数据小太阳 更新时间:2023-10-29 06:20:25 25 4
gpt4 key购买 nike

为什么有时我应该在接受 block 的函数中使用 block 而其他时候应该使用 &block?

最佳答案

block 只是一个局部变量,&block 是对传递给方法的 block 的引用。

def foo(block = nil)
p block
end

foo # => nil
foo("test") # => test
foo { puts "this block will not be called" } # => nil

def foo(&block)
p block
end

foo # => nil
foo("test") # => ArgumentError: wrong number of arguments (1 for 0)
foo { puts "This block won't get called, but you'll se it referenced as a proc." }
# => #<Proc:0x0000000100124ea8@untitled:20>

你也可以在调用方法时使用&block将proc作为一个 block 传递给一个方法,这样你就可以像使用 block 一样使用proc。

my_proc = proc {|i| i.upcase }

p ["foo", "bar", "baz"].map(&my_proc)
# => ["FOO", "BAR", "BAZ"]

p ["foo", "bar", "baz"].map(my_proc)
# => ArgumentError: wrong number of arguments (1 for 0)

变量名 block 没有什么特别的意思。如果您愿意,可以使用 &strawberries,& 符号是这里的关键。

您可能会找到 this article有帮助。

关于ruby - Ruby 中 block 和 &block 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1386276/

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