比方說,我有一堆東西,我想執行各種古怪的操作。例如:在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