Ruby 有没有关于不要在类名中加数字的规定?

Ruby 有没有关于不要在类名中加数字的规定?,ruby,naming-conventions,Ruby,Naming Conventions,我正在构建一系列从公共类继承的类。这些类的实例由以下代码()生成: def自创建(服务、记录器) 分类名称=服务。名称。到分割(“”)。收集!{| w | w.capitalize}.join>load(“/mnt/hgfs/kodiak/lib/processors/H2b_processor.rb”) TypeError:类H2B处理器的超类不匹配 from/mnt/hgfs/kodiak/lib/processors/H2b_processor.rb:1:in`' [...] [将名称中的

我正在构建一系列从公共类继承的类。这些类的实例由以下代码()生成:

def自创建(服务、记录器)
分类名称=服务。名称。到分割(“”)。收集!{| w | w.capitalize}.join>load(“/mnt/hgfs/kodiak/lib/processors/H2b_processor.rb”)
TypeError:类H2B处理器的超类不匹配
from/mnt/hgfs/kodiak/lib/processors/H2b_processor.rb:1:in`'
[...]
[将名称中的2改为“to”]
[...]
>>加载(“/mnt/hgfs/kodiak/lib/processors/H2b_processor.rb”)
=>正确

好了,问题解决了。然而,这确实让我感到疑惑:在类名称中使用数字是否会在某种程度上破坏Ruby?我在谷歌上搜索了一下,但不知道要搜索什么,像“命名约定Ruby数字”之类的东西并没有得到任何结果

开头不允许有数字,否则你应该是对的

class H2O
end

H2O.new # Works fine

class 2Extreme
end

SyntaxError: compile error
(irb):5: trailing `E' in number
class 2Extreme
        ^
(irb):5: syntax error, unexpected tIDENTIFIER, expecting tCOLON2 or '[' or '.'
    from (irb):6
    from :0

一般来说,开始输入数字不是很好的编码实践。我最喜欢的是Textbox1、Textbox2等。基本上,一个好的经验法则是描述您的类是什么,或者如果您有多个类,则将其粘贴到容器数组中。我承认代码是生成的,但我认为它本可以做得更好

这个问题与数字无关。创建类名时未正确大写

NoMethodError: undefined method `logger=' for #<H2bProcessor:0xb737f20>
归结为最简单的一段
“h2b”。大写=>“h2b”
,而不是
“h2b”

您不需要
h2b处理器
,您需要的是
h2b处理器
,因此

“h2b”。到美国分割(“uu”)。收集!{| w | w.capitalize}。加入“H2B处理器”

使用


“h2b”。美国拆分(/_|(?数字在哪里?你不能在课程开始时就有数字,但在其他任何地方都可以。这是正式语法规范的一部分。你可以在NoMethodError行上看到类名,而你可以使用数字来区分一个子类和另一个子类,我认为这会导致代码气味。拥有不同类的意义在于是为了满足不同的数据分组和处理需求。子分类是为了提供一组可供构建的部分功能。如果一个类对子类来说足够重要,那么我认为重要的是要有一个重要的名称来定义它是什么。如果差异如此细微,您可以使用一个数字,然后将这些差异合并到父类并使用逻辑来应用差异,或者在调用方法时
阻塞
/
产生
。@theTinMan我想你误解了为什么那里有一个2。在这种情况下,类是以名称中确实有一个2的服务命名的。我更喜欢保持类名与服务类似——这就是问题所在反正我是从模式开始的。下一票?为什么?这是我实际看到的东西,并且我很好地记录了它。荒谬。你会这么认为,但这里不是这样。这与继承有关——基类中的方法在创建的对象中可用,但实际类中的方法不可用。当我更改类na时“我到HbProcessor,突然一切都很好。”JCULUM:你能提供一个最小代码示例来重现你所说的bug吗?你的问题中有一些代码与这个bug不相关,还有代码缺失,我需要复制这个bug。sed。我将此标记为答案,然后继续。我在创建记录器的行之前进行了调试。创建的对象具有基类的方法,但没有来自该类的方法。将类名更改为“HtoBProcessor”,突然一切正常。
>> load("/mnt/hgfs/kodiak/lib/processors/H2b_processor.rb")
TypeError: superclass mismatch for class H2bProcessor
    from /mnt/hgfs/kodiak/lib/processors/H2b_processor.rb:1:in `<top (required)>'
[...]
[change the 2 in the name to "To"]
[...]
>> load("/mnt/hgfs/kodiak/lib/processors/H2b_processor.rb")
=> true
class H2O
end

H2O.new # Works fine

class 2Extreme
end

SyntaxError: compile error
(irb):5: trailing `E' in number
class 2Extreme
        ^
(irb):5: syntax error, unexpected tIDENTIFIER, expecting tCOLON2 or '[' or '.'
    from (irb):6
    from :0
NoMethodError: undefined method `logger=' for #<H2bProcessor:0xb737f20>
>> load("/mnt/hgfs/kodiak/lib/processors/H2b_processor.rb")
TypeError: superclass mismatch for class H2bProcessor