在Ruby中,你可以使用lambda或proc调用方法来调用迭代器吗? [英] In Ruby, can you use the lambda or or Proc call method to invoke an iterator?

查看:162
本文介绍了在Ruby中,你可以使用lambda或proc调用方法来调用迭代器吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个迭代器,我可以传递给方法来调用。

I would like to create an iterator that I can pass to a method for the method to call.

#!/usr/bin/env ruby

puts "------------------------------------"
puts "1 This works."
puts "------------------------------------"       
1.times {|who| puts "Position #{who} works!"}

puts "------------------------------------"
puts "2 This works."
puts "------------------------------------"       
aBlock = Proc.new { |who| puts "Position #{who} also works!" }       
2.times &aBlock

puts "------------------------------------"
puts "3 This works."
puts "------------------------------------"       
def eachIndex
  3.times { |i| yield i }
end

eachIndex &aBlock

puts "------------------------------------"
puts "4 This does not work."
puts "------------------------------------"       
iterator = lambda { |name| yield name }       
iterator.call(4) {|who| puts "Does not work #{who}:-("}

puts "------------------------------------"
puts "5 This does not work."
puts "------------------------------------"       
iterator = lambda { |name,&block| yield name }       
iterator.call(5) {|who| puts "Does not work #{who}:-("}

puts "------------------------------------"
puts "6 This does not work."
puts "------------------------------------"       
iterator = Proc.new { |name,&block| yield name }       
iterator.call(6) {|who| puts "Does not work #{who}:-(" }

lambda或proc是否可以是迭代器Ruby?我想将它们作为参数传递给一个类。

Can lambda's or proc's be iterators in Ruby? I would like to pass them to a class as a parameter.

推荐答案

以下是这样做的方法

iterator = -> (name, &block) { block.call name }
iterator.call(4) { |who| puts "It works now #{who} :)" }

PS Note我用她的快捷方式e代表 lambda - > 名为stabby lambda

P.S. Note i use a shortcut here for a lambda, -> called stabby lambda

这篇关于在Ruby中,你可以使用lambda或proc调用方法来调用迭代器吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆