給定以下示例:
apply_filter_a(
apply_filter_b(
apply_filter_c(
active_record_dataset
)
)
)
...
def apply_filter_a(records)
# some more complex than
...
end
def apply_filter_b(records)
# some other complex logic filtering the active record dataset
...
end
def apply_filter_c(records)
# some other complex logic filtering the active record dataset
...
end
如何以apply_filter_a(apply_filter_b(...更簡單的方式簡化嵌套方法語法 ())?是否可以應用方法陣列中的方法?
uj5u.com熱心網友回復:
有yield_self方法,或者你可以使用它的別名then。您可以逐個管道呼叫,每個過濾器方法都必須回傳一個活動記錄關系。
apply_filter_a(active_record_dataset)
.then { |records| apply_filter_b(records) }
.then { |records| apply_filter_c(records) }
uj5u.com熱心網友回復:
您可以使用Enumerable#inject.
首先,我們需要一組方法。我們可以讓那些使用method.
my_filters = [method(:apply_filter_c), method(:apply_filter_b), method(:apply_filter_a)]
然后我們可以使用inject過濾器串列來應用一個初始值。
my_filters.inject(active_record_dataset) { |acc, f| f.call acc }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/455225.html
標籤:红宝石
上一篇:格式靈活的假身份證號碼
下一篇:單行按尾隨數字后綴排序
