我对一堆数组进行了这样的操作:
obj = MyObject.new
[[
#data
],
[
#data
],
# ...
].inject(obj) do |memo, i|
memo.foo_method AnotherObject.new(i[0],i[1])
end
永远不会改变的是注射操作本身。如果它可以以正确的方式隐藏在辅助方法中呢?如下所示:
def my_helper_method(obj,arr)
# obj is MyObject's instance,
# arr - an array from the external array
inject(obj) do |memo, i|
memo.foo_method AnotherObject.new(i[0],i[1])
end
end
[[
#data
],
[
#data
],
# ...
].each(&:my_helper_method)
如何将两者传递给辅助方法:MyObject的实例和项目?将方法转换为块时是否可以执行?
答案 0 :(得分:2)
根据您在问题中分享的功能定义,您应该使用如下所示的内容。而且,您的功能应该使用arr.inject
而不仅仅是inject
arr = [[
#data
],
[
#data
],
# ...
]
obj = MyObject.new
my_helper_method(obj, arr)
但是,如果您想让inject
块内的代码可重复使用,您可以使用Proc
,如下所示:
block = Proc.new { |memo, i| p "Put your code here...#{memo} #{i}" }
[[
"s"
],
[
"p"
],
# ...
].inject(MyObject.new, &block)
如果您不喜欢Proc
并想要使用此功能,您可以执行以下操作:
def f memo, i
p "put your code here... #{memo} #{i}"
end
[[
"s"
],
[
"p"
],
# ...
].inject(MyObject.new, &method(:f))