加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby块隐式变量

发布时间:2020-12-17 02:47:21 所属栏目:百科 来源:网络整理
导读:我想知道 Ruby是否具有像Scala中那样的隐式块参数或通配符,可以绑定并用于进一步执行,如下所示: my_collection.each { puts _ } 要么 my_collection.each { puts } 有一些类似于proc的符号,它从集合中调用每个元素的一些方法,如:array_of_strings.each:do
我想知道 Ruby是否具有像Scala中那样的隐式块参数或通配符,可以绑定并用于进一步执行,如下所示:

my_collection.each { puts _ }

要么

my_collection.each { puts }

有一些类似于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类的实例.方法实例,与符号类似,定义to_proc方法,因此它可以与一元&和操作符.此运算符获取定义to_proc方法的proc或任何对象,并将其转换为块,然后将其传递给方法.所以,如果你有一个定义如下的方法:

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

你可以写:

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

哪个将翻译为:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读