代码之家  ›  专栏  ›  技术社区  ›  Simon

在Ruby中使用begin/end是否可以像在C中使用region一样?

  •  5
  • Simon  · 技术社区  · 16 年前

    我最近从C搬到了Ruby,我发现自己缺少了制作可折叠、带标签代码区域的能力。我刚刚想到做这种事应该是可以的:

    class Example
      begin # a group of methods
    
        def method1
          ..
        end
    
        def method2
          ..
        end
    
      end
    
      def method3
        ..
      end
    end
    

    …但这样做真的可以吗?方法1和方法2最终是否与方法3相同?还是有一些我还没见过的红宝石成语?

    5 回复  |  直到 11 年前
        1
  •  6
  •   molf    16 年前

    正如其他人所说,这不会改变方法定义。

    但是,如果您想给方法组加标签,为什么不使用Ruby语义来给它们加标签呢?您可以使用模块将代码分成属于一起的块。对于大型类来说,这是一个很好的实践,即使您不重用模块。当代码增长时,很容易将模块分割成单独的文件,以便更好地组织。

    class Example
      module ExampleGroup
        def method1
          # ..
        end
    
        def method2
          # ..
        end
      end
      include ExampleGroup
    
      def method3
        # ..
      end
    end
    
        2
  •  6
  •   Mladen Jablanović    16 年前

    添加 任意Ruby代码 为了取悦你的编辑对我来说一点都不合理。我认为您应该尝试获得一个合适的文本编辑器,它可以配置为使用您在注释中放入的关键字来启用代码折叠,例如:

    # region start AAA
    
    some(:code, :here)
    
    # region end AAA
    

    如果你允许我讽刺的话:你应该知道Ruby比C更具表现力,更优雅,更漂亮,很有可能根本就没有任何Ruby代码被隐藏起来!;)

        3
  •  2
  •   wdebeaum    16 年前

    我觉得应该可以。不过我没见过很多。另一种方法是在使用较少缩进的情况下完成相同的操作,即关闭并重新打开类,如下所示:

    class Example
      def method1
        ..
      end
    
      def method2
        ..
      end
    end
    
    # optionally put some other code here
    
    class Example
      def method3
        ..
      end
    end
    

    我认为这经常被用来让你可以把其他的代码放在中间,比如当第一个常量被定义的时候 class Example 块,用于在中间代码中定义常量,用于在第二个代码中定义常量 课堂实例 块。这样,在定义常量之前就不需要引用它了。

        4
  •  2
  •   JamesDeHart    11 年前

    我知道这可能有点老,但我遇到了这个问题,找到了一个致命的解决方案。如果您使用的是“rubymine”,您可以在区域内使用。

    这就是他们谈论导航区域的地方 https://www.jetbrains.com/ruby/help/navigating to custom region.html

    地区描述 你的代码在这里… γ端区 < /代码>

    因此,在代码中使用上述内容,您将看到以下内容:

    Rubymine代码编辑器-使用示例方法,使用regions un-folderd

    Rubymine代码编辑器-使用示例方法,使用 regions fold

    可以做区域。

    这就是他们谈论导航区域的地方 https://www.jetbrains.com/ruby/help/navigating-to-custom-region.html

    #region Description 
    Your code goes here... 
    #endregion
    

    因此,在您的代码中使用上述内容,您将看到以下内容:

    Rubymine代码编辑器-使用区域的样本方法 未折叠的 Rubymine code editor - With a sample method using regions **un-folded**.

    Rubymine代码编辑器-使用示例方法 区域 折叠 Rubymine code editor - With a sample method using **regions** folded.

        5
  •  1
  •   sepp2k    16 年前

    是的,可以这样做(即它不会改变代码的语义)。

    然而,这不是一个常见的模式,并且对于不理解 begin ... end 块是。

    推荐文章