gpt4 book ai didi

ruby - 明确地产生 n 值给 Symbol#to_proc

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

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#explicitly 方法,而不是生成单个值数组,而是显式生成所有值?

如果你成功了,这些应该有效:

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

我针对此执行了您的测试并返回了正确的结果。

更新:更改为不显式捕获 block 。

关于ruby - 明确地产生 n 值给 Symbol#to_proc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8998397/

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