我有大约11个这样的功能:
def pending_acceptance(order_fulfillments)
order_fulfillments.each do |order_fulfillment|
next unless order_fulfillment.fulfillment_time_calculator.
pending_acceptance?; collect_fulfillments(
order_fulfillment.status,
order_fulfillment
)
end
end
def pending_start(order_fulfillments)
order_fulfillments.each do |order_fulfillment|
next unless order_fulfillment.fulfillment_time_calculator.
pending_start?; collect_fulfillments(
order_fulfillment.status,
order_fulfillment
)
end
end
迭代总是相同的,但是
next unless
条件不同。如果你想知道的话:它是next unless
和;
的,因为rubocop在抱怨它。有没有更好的解决方案?我讨厌这个意大利面密码。类似于将条件传递到“iterate_it”函数中之类的…编辑:不能只传递另一个参数,因为条件有时是双重的:
def picked_up(order_fulfillments)
order_fulfillments.each do |order_fulfillment|
next unless
order_fulfillment.handed_over_late? && order_fulfillment.
fulfillment_time_calculator.pending_handover?
collect_fulfillments(
order_fulfillment.status,
order_fulfillment
)
end
end
edit2:还有一个问题:如何分割一个符号,从状态中获取用户角色?类似于:
:deliverer_started => :deliverer or 'deliverer'
? 最佳答案
你可以制作字符串数组
arr = ['acceptance','start', ...]
下一步:
arr.each do |method|
define_method ( 'pending_#{method}'.to_sym ) do |order_fulfillments|
order_fulfillments.each do |order_fulfillment|
next unless order_fulfillment.fulfillment_time_calculator.
send('pending_#{method}?'); collect_fulfillments(
order_fulfillment.status,
order_fulfillment
)
end
end
end
有关define_method的更多信息
关于ruby-on-rails - 许多非常相似的功能,是否修复了意大利面条式代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39242107/