Ruby 通过发送方法传递要选择的块
给我ArgumentError:参数数目错误(0代表1..4)块和lambdas/proc不一样,不能用一个替换另一个。以下内容将引导您朝着正确的方向前进Ruby 通过发送方法传递要选择的块,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,给我ArgumentError:参数数目错误(0代表1..4)块和lambdas/proc不一样,不能用一个替换另一个。以下内容将引导您朝着正确的方向前进 my_array = [[1, 'foo_parent', nil], [2,'bar_is_son_of_foo', 1], [3, 'zok_is_son_of_bar', 2]] def children_block Proc.new do |c| if c.is_a? Array c[2] == self
my_array = [[1, 'foo_parent', nil], [2,'bar_is_son_of_foo', 1], [3, 'zok_is_son_of_bar', 2]]
def children_block
Proc.new do |c|
if c.is_a? Array
c[2] == self[0]
end
end
end
my_array.send(:select) &children_block
您可以通过
send
将块传递给select
my_array.send(:select) { |element| filter_somehow(element) }
以下是一个工作示例:
my_array.send(:select, &children_block)
您试图解决的问题也可以通过以下方式解决:
my_array = [[1, 'foo_parent', nil], [2,'bar_is_son_of_foo', 1], [3, 'zok_is_son_of_bar', 2]]
def children_block
Proc.new do |c|
p c
end
end
p my_array.send(:select, &children_block)
#=> [1, "foo_parent", nil]
[2, "bar_is_son_of_foo", 1]
[3, "zok_is_son_of_bar", 2]
或
取决于您感兴趣的元素
PS:今天关于传球拦网也有类似的问题。我回答的第一部分是该问题答案的推导数组上没有方法
third
,只有First
和last
,也不认为self。First
在Proc
[14]pry(main)>数组中有意义=>[1,2,3][15]撬杆(主)>array.third=>3您的错误指向哪里?好的,third
不是核心ruby的一部分,可能是rails或其他正在添加的东西it@WandMaker是的,如果我没记错的话,活动的\u支持加起来就是.fifth
和forth\u two
。但是您可以将lambda/proc用作块。[3]pry(main)>test.send(:select,&children\u块)仍然给我一个错误ArgumentError:参数数目错误(0代表2..3)我共享了一个最小的工作代码,您可以检查一下。我不确定您正在使用的test
是什么。对不起,魔杖。请考虑“MyNoLART”而不是测试,我是从控制台复制的。您正在显示的问题不是来自这段代码,问题在其他地方。如果您有完整的堆栈跟踪,请更新您的问题
my_array.select {|i| my_array.find {|j| j.first == i.last} }
my_array.select {|i| my_array.find {|j| i.first == j.last} }