缩短Ruby中非常长的类定义

时间:2016-07-14 08:44:10

标签: ruby class rubocop

我正在实施Rubocop,我在代码库中遇到了与此类似的行:

class ThisIsAVerlyLongClassName < JSONAPI::SomeOtherModule::AnotherClassWithAnInsaneName

Rubocop在这里抱怨线路长度,但是我无法找到一种方法来创建这个类定义的更紧凑版本,而无需重命名类,这就是我在这里要避免的

一般而言,如果没有对编码风格进行争论,那么让Rubocop停止抱怨行长度而不在.rubocop.yml中编写异常或编辑类和模块名称的最佳方法是什么?

4 个答案:

答案 0 :(得分:1)

  

让rubocop停止抱怨行长度而不在.rubocop.yml中进行异常或编辑类和模块名称的最佳方法是什么?

没有逃脱。如果你想解决这个抱怨,你必须:

  • disable it explicitly通过在.rubocop.yml或该特定文件中设置覆盖
  • 解决问题,因此重命名该课程

答案 1 :(得分:1)

您通常可以通过在该行添加如下注释来禁用特定行上的特定Rubocop警告:

class A < B::C::D # rubocop:disable Metrics/LineLength

答案 2 :(得分:1)

虽然类定义体具有自己的非嵌套词法范围(如方法定义体),但超类表达式在包含范围内进行求值。换句话说:你可以使用局部变量:

superclass = JSONAPI::SomeOtherModule::AnotherClassWithAnInsaneName
class ThisIsAVerlyLongClassName < superclass

答案 3 :(得分:1)

我刚刚发现类定义可以分成多行,如下所示:

class ThisIsAVerlyLongClassName <
  JSONAPI::SomeOtherModule::AnotherClassWithAnInsaneName

它破坏了Atom中第二行的语法高亮,但是代码运行并且所有测试都通过了!