5

我最近从 C# 迁移到 Ruby,我发现自己失去了制作可折叠、标记的代码区域的能力。我突然想到,做这种事情应该没问题:

class Example
  begin # a group of methods

    def method1
      ..
    end

    def method2
      ..
    end

  end

  def method3
    ..
  end
end

...但是这样做真的可以吗?方法 1 和方法 2 最终与方法 3 是同一类东西吗?或者是否有一些我还没有见过的 Ruby 习惯用法?

4

5 回答 5

6

添加任意 Ruby 代码以取悦您的编辑器对我来说似乎根本不合理。我认为您应该尝试获得一个像样的文本编辑器,该编辑器能够配置为使用您在注释中输入的一些关键字来启用代码折叠,例如:

# region start AAA

some(:code, :here)

# region end AAA

如果你允许我讽刺一下:你应该知道 Ruby 比 C# 更具表现力、优雅和漂亮,而且很可能一开始就不应该隐藏任何 Ruby 代码!;)

于 2010-07-08T15:27:05.627 回答
6

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

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

class Example
  module ExampleGroup
    def method1
      # ..
    end

    def method2
      # ..
    end
  end
  include ExampleGroup

  def method3
    # ..
  end
end
于 2010-07-08T16:12:11.047 回答
3

我知道这可能有点老了,但我遇到了这个问题并找到了一个杀手级的解决方案。如果你使用“Rubymine”,你可以做#regions。

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

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

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

Rubymine代码编辑器 - 使用展开区域的示例方法 Rubymine 代码编辑器 - 使用区域 **un-folded** 的示例方法。

Rubymine 代码编辑器 - 使用折叠 区域的示例方法Rubymine 代码编辑器 - 使用 **regions** 折叠的示例方法。

于 2015-04-16T17:37:52.740 回答
2

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

class Example
  def method1
    ..
  end

  def method2
    ..
  end
end

# optionally put some other code here

class Example
  def method3
    ..
  end
end

我觉得这个经常用,这样你可以把其他代码放在中间,比如第一个class Example块定义了一个常量,中间代码用来定义一个常量,中间代码用来定义一个常量第二class Example块。这样你就不必在定义之前引用一个常量。

于 2010-07-08T15:02:21.213 回答
1

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

然而,这不是一个常见的模式,它可能会让你的代码的读者感到困惑,因为他们不明白这个begin ... end块的目的是什么。

于 2010-07-08T15:01:22.417 回答