【发布时间】:2015-08-15 10:03:13
【问题描述】:
一个user有多个libraries,每个库有多个books。我想知道用户是否在他的图书馆中有一本书。我调用这个方法是:current_user.has_book?(book):
def has_book?(book)
retval = false
libraries.each do |l|
retval = true if l.books.include?(book)
end
return retval
end
我的方法可以重构吗?
【问题讨论】:
-
出于什么目的?你最终的目标是什么?如果清晰是您的目标,则较短不一定更清晰。
-
我的目的是采用和理解我使用的语言的“技巧和窍门”,以生成更易于维护的代码并保持与常见用法一致。如果我能在 1 或 2 内完成这项工作,我不想要丑陋的代码或 10 行代码。
-
在 Ruby 中,您始终可以用分号替换换行符,因此您始终可以在 1 行中完成这项工作:
def has_book?(book) retval = false; libraries.each do |l| retval = true if l.books.include?(book) end; return retval end。不过,这并不一定会使它更易于维护。 (旁注:我真的不理解对“少行”或“单行”的痴迷。) -
可维护性和......呃......“惯用性”?我的意思是,您的最终目标是拥有可维护和惯用的代码。那么你显然需要重构。您最近的编辑似乎正在解决这个问题。
-
我想知道为什么@Зелёный 删除了他的答案,它似乎确实回答了这个问题,它甚至大大提高了性能。
标签: ruby-on-rails ruby refactoring