Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中使用begin/end是否可以像在C中使用#region那样?_Ruby_Regions - Fatal编程技术网

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

在Ruby中使用begin/end是否可以像在C中使用#region那样?,ruby,regions,Ruby,Regions,我最近从C#迁移到Ruby,我发现自己缺少制作可折叠、标记代码区域的能力。我突然想到,做这种事应该没问题: class Example begin # a group of methods def method1 .. end def method2 .. end end def method3 .. end end …但这样做真的可以吗?方法1和方法2最终是否与方法3相同?或者有一些Ruby的习惯用法我还

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

class Example
  begin # a group of methods

    def method1
      ..
    end

    def method2
      ..
    end

  end

  def method3
    ..
  end
end

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

是的,这样做是可以的(也就是说,它不会改变代码的语义)


然而,这不是一种常见的模式,它可能会让不理解
开始的目的的代码读者感到困惑。。。结束
块是。

我认为应该可以。不过我没怎么看过。在使用较少缩进的情况下,完成相同任务的另一种方法是关闭并重新打开该类,如下所示:

class Example
  def method1
    ..
  end

  def method2
    ..
  end
end

# optionally put some other code here

class Example
  def method3
    ..
  end
end

我认为这是经常使用的,这样就可以把其他代码放在中间,比如当在第一个<代码>类实例< /代码>块中定义常量时,它用于在中间代码中定义一个常量,用于在第二个代码>类实例< /代码>块中定义一个常量。这样你就不必在常数被定义之前引用它。

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

# region start AAA

some(:code, :here)

# region end AAA

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

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

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

class Example
  module ExampleGroup
    def method1
      # ..
    end

    def method2
      # ..
    end
  end
  include ExampleGroup

  def method3
    # ..
  end
end

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

这就是他们谈论导航区域的地方

因此,通过代码中的上述内容,您将看到以下内容:

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

Rubymine代码编辑器-使用区域的示例方法

像这样的正式评论也是代码,IMHO。所以按照你的逻辑,它们也是不合理的;)Rubymine将允许您使用#区域
#region Description 
Your code goes here... 
#endregion