命名空间文件的内容,但不增加缩进

时间:2016-11-25 17:06:09

标签: ruby

当你想在ruby中命名一堆类时,你通常会这样做:

# my_namespace.rb

module MyNamespace

  class ClassOne
    # ...
  end

  class ClassTwo
    # ...
  end

  # ...
end

具有增加文件中所有代码的缩进级别的不幸副作用。我更愿意做一些事情,比如在文件顶部发出一个有效说明的指令," 此文件中的所有内容都应该在MyNamespace模块中 "

这可能吗?

注意:我知道我可以保留module包装但缩进所有内容,但该解决方案是不可接受的。

2 个答案:

答案 0 :(得分:0)

代码的缩进级别是编辑器/ ide的函数。简单的答案是:不要缩进代码。

这只是一个视觉方面,无论视觉效果如何,范围的级别都会增加。

这可以通过利用不同的语法来避免,例如使用范围运算符作为Sergio Tulentsev提到的。

你可以使用eval并读入一个文件,但我认为这会很糟糕,虽然它会修复缩进“问题”。

module General
  module_eval "class One end"
  module_eval "class Two; p 'Done creating Two'; def self.report(); 'I am in General::Two' ; end; end"

  module_eval File.read('three.rb')
end

p General::Two.report
p General::Three.new.report

作为单独的文件three.rb

class Three
  def report
    "This is #{self.class} and has #{self.class.ancestors}"
  end
end

但显然没有什么能够让压痕远离。

我确实认为这是一个有用的工具,可以在阅读时根据缩进来跟踪范围,因此有缩进,因此有缩进,因为缩进确实看起来不像是一种痛苦。当事物流向屏幕右侧时,每个级别有8个空格(制表符表示)会更加恼人。

答案 1 :(得分:-3)

Rubocop会根据Ruby style guide告诉您该怎么做!

编辑:

for(int a=0; a<26; a++)
{
    for(int b=0; b<26; b++)
    {
        for(int c=0; c<26; c++)
        {
            for(int d=0; d<26; d++)
            {
                for(int e=0; e<26; e++)
                {

                    for(int f=0; f<26; f++)
                    {
                        result[0]=alphabet[a];
                        result[1]=alphabet[b];
                        result[2]=alphabet[c];
                        result[3]=alphabet[d];
                        result[4]=alphabet[e];
                        result[5]=alphabet[f];


                        //printf("result : %s\n candidate %x %x %x %x %x",result,candidate.a,candidate.b,candidate.c,candidate.d,candidate.e);

                        uint32_t A,B,C,D,E,temp; // var "a" is not "A"
                        uint32_t w[80]= {0};


                        // Declarations
                        A=h0;
                        B=h1;
                        C=h2;
                        D=h3;
                        E=h4;

导致此Rubocop警告:

# my_namespace.rb module MyNamespace class ClassOne # ... end class ClassTwo # ... end # ... end