Ruby:可枚举的收益率
发布时间:2020-12-17 03:27:52 所属栏目:百科 来源:网络整理
导读:我希望能够在一个可枚举的块中产生,以便创建一些样板基准测试代码. 基本上我想做点什么(简化): def iterator( enumerable,block ) iterations = enumerable.size counter = 0 enumerable.each do |item| counter +=1 puts "Iterating #{counter}/#{iteratio
我希望能够在一个可枚举的块中产生,以便创建一些样板基准测试代码.
基本上我想做点什么(简化): def iterator( enumerable,&block ) iterations = enumerable.size counter = 0 enumerable.each do |item| counter +=1 puts "Iterating #{counter}/#{iterations}..." yield end end 然后我希望能够使用这个方法将这个样板基准测试代码包装在我将要迭代的块中,这样我就可以调用类似的东西: # assuming foo is an enumerable collection of objects iterator foo do item.slow_method item.mundane_method item.save end …当这段代码执行时,我会得到以下日志输出: Iterating 1/1234... Iterating 2/1234... Iterating 3/1234... 看起来这种事情一定是可能的,但是我无法弄清楚语法,也不知道这样的事情是什么(为了查找它). 问题是我需要将样板包装在OUTSIDE的可枚举对象中,并且还要嵌入迭代块.我可以很好地传递一个可枚举的对象,但我似乎无法从我传入的块中调用迭代对象上的方法. 我希望这个解释有意义,我很难描述它.如果您需要澄清任何内容,请留下评论,我会尝试更好地解释. 解决方法
Ruby的yield语句可以带参数.你想说
yield item 这会将“当前”项目传递到“外部”块. 希望我能正确理解这个问题. 附录 以下是显示它的实际代码: class Item def initialize(id) @id = id end def slow_method() puts "slow #@id" end def mundane_method() puts "mundane #@id" end def save() puts "save #@id" end end foo = [Item.new(100),Item.new(200),Item.new(300)] def iterator(enumerable,&block) iterations = enumerable.size counter = 0 enumerable.each do |item| counter +=1 puts "Iterating #{counter}/#{iterations}..." yield item end end iterator foo do |item| item.slow_method item.mundane_method item.save end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |