比方说,我有一堆东西,我想执行各种古怪的操作。例如:在Ruby中链接流函数的最简洁的方法是什么?
my_array = [
{ name: 'Lyra', age: 12 },
{ name: 'Harry', age: 11 },
{ name: 'Kestrel', age: 13},
]
我想筛选出任何12岁以下,改变所有名的符号,然后按年龄排序他们(说)。
这可以通过以下方式实现:
new_array = my_array.
select { |person| person[:age] > 11 }.
map { |person| person.merge(name: person[:name].to_sym) }.
sort_by { |person| person[:age] }
所以这就是所有的花花公子。但是如果我有任意复杂的逻辑,我需要做我的选择/映射/排序/等等。
标准实践表明,应避免使用带花括号的多线块(有些棉绒甚至完全禁止它)。然而,另一种方法是启动链接do..end
块,它看起来甚至ickier:
new_array = my_array.
select do |person|
# Do something complex
end.
map do |person|
# More complex stuff
end.
sort_by do |person|
# Yet more complex stuff
end
是否Ruby社区有链接这样的事情上最好的做法有什么建议?例如,定义Proc
(或类似的)是否更好,并将其传递给块?
_“是更好的定义PROC(或类似),并传递到块?” _ - 你不必要手动调用块内的proc,可以将它传递给_块,例如'filter = - >(p){p [:age]> 11}'并通过'my_array.select(&filter)调用它' – Stefan
我发现你的第一个代码链接在一行块上,带有大括号 – Poilon
@Poilon,适用于单线运动员。问题是如何处理更复杂的逻辑,即不适合一条线的逻辑。 – Stefan