ruby – 显式生成符号#to_proc的n值
发布时间:2020-12-17 02:35:07 所属栏目:百科 来源:网络整理
导读:在 discovered tonight中,Ruby的 Symbol#to_proc 处理除第一个之外的其他产生的值作为方法调用的参数.换句话说,这两个方法调用是等价的: yields_three{ |a,b,c| a.foo(b,c) }yields_three( :foo ) 我认为这可能是一个强大的(或至少是有趣的)成语,所以我尝试
在
discovered tonight中,Ruby的
Symbol#to_proc 处理除第一个之外的其他产生的值作为方法调用的参数.换句话说,这两个方法调用是等价的:
yields_three{ |a,b,c| a.foo(b,c) } yields_three( &:foo ) 我认为这可能是一个强大的(或至少是有趣的)成语,所以我尝试了以下内容: class Player def add_score( points ) @score += points end end my_array_of_players.zip( my_array_of_turn_scores ).each(&:add_score) 不幸的是,这不起作用: NoMethodError: undefined method `add_score' for [<#Player 'Phrogz'>,42]:Array 所以,问题是:你能编写一个Enumerator#explicit方法,而不是产生一个值数组,而是显式地产生所有这些值吗? 如果你成功了,这些应该有效: pairs = [[1,2],[3,4],[5,6]] pairs.map.explicitly(&:+) #=> [3,7,11] pairs.map.explicitly(&:*) #=> [2,12,30] class String def say_hey(b) puts "#{self} says 'hey' to #{b}" end end ('a'..'d').each_cons(2).explicitly(&:say_hey) #=> "a says 'hey' to b" #=> "b says 'hey' to c" #=> "c says 'hey' to d" 解决方法
这是你如何做到的:
class Enumerator def explicitly each { |e| yield(*e) } end end 我对此执行了测试,并返回了正确的结果. 更新:更改为不显式捕获块. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |