gpt4 book ai didi

Ruby block 隐式变量

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

我想知道 Ruby 是否有类似于 Scala 中的隐式 block 参数或通配符之类的东西,可以像这样绑定(bind)并用于进一步的执行:

my_collection.each { puts _ }

my_collection.each { puts }

有类似 symbol to proc 的东西,它在集合中的每个元素上调用一些方法,例如:array_of_strings.each &:downcase,但我不想在循环中执行对象的方法,而是执行以这个对象作为参数的一些函数:

my_collection.each { my_method(_) }

代替:

my_collection.each { |f| my_method(f) }

在 Ruby 中有什么方法可以做到这一点吗?

最佳答案

你应该能够做到这一点:

my_collection.each &method(:my_method)

method 是在 Object 类上定义的方法,返回 Method 类的实例。 Method 实例,类似于符号,定义了to_proc 方法,因此它可以与一元& 运算符一起使用。此运算符接受一个 proc 或任何定义 to_proc 方法的对象,并将其转换为一个 block ,然后将其传递给一个方法。所以如果你有一个定义如下的方法:

def my_method(a,b)
puts "#{b}: #{a}"
end

你可以这样写:

[1,2,3,4].each.with_index &:method(:my_method)

这将转化为:

[1,2,3,4].each.with_index do |a,b|
puts "#{b}: #{a}"
end

关于Ruby block 隐式变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24037430/

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