gpt4 book ai didi

ruby - 如何将 lambda 传递给 Hash.each?

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

如何将 lambda 传递给 hash.each,以便我可以重复使用一些代码?

> h = { a: 'b' }
> h.each do |key, value| end
=> {:a=>"b"}
> test = lambda do |key, value| puts "#{key} = #{value}" end
> test.call('a','b')
a = b
> h.each &test
ArgumentError: wrong number of arguments (1 for 2)
from (irb):1:in `block in irb_binding'
from (irb):5:in `each'
from (irb):5
from /Users/jstillwell/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'
> h.each test
ArgumentError: wrong number of arguments(1 for 0)
from (irb):8:in `each'
from (irb):8
from /Users/jstillwell/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'

最佳答案

each 生成 block 的当前元素,因此 lambda 需要接受一个参数,而不是两个。在 Hash 的情况下,生成的元素是双元素 Array,第一个元素是键,第二个元素是值。

test = lambda do |el| puts "#{el.first} = #{el.last}" end
h.each &test
# a = b

或者,您可以使用 Ruby 对参数列表中的解构绑定(bind)的支持:

test = lambda do |(k, v)| puts "#{k} = #{v}" end
h.each &test
# a = b

或者,您可以使用 Proc,而不是使用与方法具有相同参数绑定(bind)语义的 lambda,它具有与方法相同的参数绑定(bind)语义 block ,即将单个 Array 参数解压为多个参数绑定(bind):

test = proc do |k, v| puts "#{k} = #{v}" end
h.each &test
# a = b

关于ruby - 如何将 lambda 传递给 Hash.each?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14992471/

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