Tag: 重构

如何改进正则表达式以消除不必要的方法链接?

此函数方法接受一个数字并返回以逗号分隔的相同值,这是美国的常见惯例。 我可以让它与正则表达式一起工作的唯一方法是在表达式之前和之后反转字符串。 是否有正则表达式可以帮助我消除为方法function调用String#reverse两次的需要? def separate_comma(number) raise “You must enter a number.” if number.is_a?(Numeric) == false number.to_s.reverse.gsub(/(\d{3})(?=\d{1,3})/, “\\1,”).reverse end

元编程有副作用时如何重构?

我正在使用Ruby on Rails 3.2.9和Ruby 1.9.3-p125。 在我之前的问题之后,我最终得到了一个关于元编程自编码的acts_as_customizable插件的问题,因为相关的代码对其他类有副作用 ,而不是“充当可自定义的”。 总结一下这个问题:为Article模型“内部”(通过元编程)声明的acts_as_customizable方法为Comment模型添加了一个customize方法,为了节省时间,Rails不会在启动时加载所有这些类,使应用程序引发NoMethodError – undefined method ‘customize’ for # 直到加载Article类。 建议的解决方案是在Comment模型中的require_dependency ‘article’ ,但我正在寻找另一种方式(也许,更好的建议的方式)让应用程序正常工作,但没有任何问题像在这个问题中解释。 也就是说,我想保留一个*短代码**和相同的行为,但使用更“合适”的方式来制作东西,可能会改变类的加载过程或计划对整个代码进行大量重构,如果有必要的话。 我应该如何处理这种情况? 你有什么想法? 更新 :经过一些研究,我发现问题仅出现在开发模式中,因为config.cache_classes设置为false使得每个请求都要重新加载类。 注意 :我想指出元编程在我的案例中非常有用, Article和Comment类在我的“定制”概念方面彼此高度相关。 所以我想找到一个解决方案来缓解对基础行为的改变 。 *就我而言,元编程(即使它有副作用)使我避免了很多代码语句。

字符串值的Ruby多重OR评估

我想知道是否在Ruby中编写以下内容的方式很简单: ext == “.xlsx” || ext == “.xls” || ext == “.ods” 我最初的想法是以下似乎没有按预期工作: ext == “.xlsx” || “.xls” || “.ods”

你如何说服你的经理你的项目需要大量的重构?

我作为承包商加入了铁路项目。 该项目已经持续了一年多。 代码由大约10个不同的开发人员编写,其中大多数也是承包商。 他们有不同的代码风格。 其中一些来自Java。 该代码与metric_fu的分数很可怕。 许多function都很长(100 – 300行)。 某些函数具有大量的逻辑分支,循环和递归。 每个请求都会生成大量的SQL查询。 表现非常糟糕。 许多过时的代码从未使用但从未有机会被清理。 核心架构是完全错误的或过度设计的。 代码覆盖率仅为25%左右。 观点和部分是混乱的,阅读和理解很糟糕。 经理通过不断添加新function来尝试满足CEO,但是新function越来越难以正确实施而不会破坏其他function。 他知道代码很糟糕,但不想花太多精力修复它们,因为重构会花费太长时间。 作为承包商/开发商,有什么方法可以清除这种情况并方便经理或首席执行官分配一些时间进行重构? 相关问题 我如何说服持怀疑态度的管理层和同事允许重构糟糕的代码? 如何重构预算 处理不合逻辑的经理人

对包含时间或距离的字符串进行排序

我已经为自定义字符串实现了排序算法,该字符串表示田径事件的时间或距离数据。 以下是格式 ’10:03.00 – 十分三秒或十英尺三英寸 排序的结果是,对于场事件,最长的投掷或跳跃将是第一个元素,而对于运行事件,最快的时间将是第一个。 以下是我目前用于现场活动的代码。 我没有发布running_event_sort因为它与大于/小于交换的逻辑相同。 虽然它有效,但它看起来过于复杂,需要重构。 我愿意接受建议。 任何帮助都会很棒。 event_participants.sort!{ |a, b| Participant.field_event_sort(a, b) } class Participant def self.field_event_sort(a, b) a_parts = a.time_distance.scan(/'([\d]*):([\d]*).([\d]*)/) b_parts = b.time_distance.scan(/'([\d]*):([\d]*).([\d]*)/) if(a_parts.empty? || b_parts.empty?) 0 elsif a_parts[0][0] == b_parts[0][0] if a_parts[0][1] == b_parts[0][1] if a_parts[0][2] > b_parts[0][2] -1 elsif a_parts[0][2] b_parts[0][1] -1 else 1 end elsif a_parts[0][0] > […]

在Ruby中重构

是否有任何支持Ruby或RoR重构的程序或IDE?

ruby快速阅读标准

什么是从STDIN读取多个1000000个字符(整数)的最快方法,并将其拆分为一个字符整数(不是字符串)的数组? 123456 > [1,2,3,4,5,6]

这个问题更像ruby般的解决方案?

我正在学习ruby并通过解决Project Euler的问题来练习它。 这是我对问题12的解决方案。 # Project Euler problem: 12 # What is the value of the first triangle number to have over five hundred divisors? require ‘prime’ triangle_number = ->(num){ (num *(num + 1)) / 2 } factor_count = ->(num) do prime_fac = Prime.prime_division(num) exponents = prime_fac.collect { |item| item.last + 1 } fac_count = exponents.inject(:*) […]

你会如何整理这个控制器逻辑?

我在控制器中有一些逻辑,如果满足某些条件,则设置对象的状态: if params[:concept][:consulted_legal] == 0 && params[:concept][:consulted_marketing] == 1 @concept.attributes = {:status => ‘Awaiting Compliance Approval’} elsif params[:concept][:consulted_marketing] == 0 && params[:concept][:consulted_legal] == 1 @concept.attributes = {:status => ‘Awaiting Marketing Approval’} elsif params[:concept][:consulted_marketing] == 0 && params[:concept][:consulted_legal] == 0 @concept.attributes = {:status => ‘Awaiting Marketing & Legal Approval’} else @concept.attributes = {:status => ‘Pending Approval’} […]

如何在Ruby应用程序中找到未使用的方法?

我有一个Ruby应用程序,有很多类/模块,其中一些没有使用。 有没有一种简单的方法可以找出哪个? 我正在考虑做一个配置文件,然后使用它的输出。 还有其他想法吗?