5

私は最近 C# から Ruby に移行しましたが、折りたたみ可能なラベル付きのコード領域を作成する機能が不足していることに気づきました。この種のことをしても問題ないはずだと思いました:

class Example
  begin # a group of methods

    def method1
      ..
    end

    def method2
      ..
    end

  end

  def method3
    ..
  end
end

...でも、実際にそれを行ってよいのでしょうか? method1 と method2 は method3 と同じようなものになるのでしょうか? それとも、まだ見たことのない、これを行うための Ruby イディオムはありますか?

4

5 に答える 5

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 に答える
6

編集者を喜ばせるために任意の Ruby コードを追加することは、私にはまったく合理的ではないように思えます。コメントに入力したキーワードを使用してコードの折りたたみを有効にするように構成できる、適切なテキストエディターを入手する必要があると思います。たとえば、次のようになります。

# region start AAA

some(:code, :here)

# region end AAA

皮肉を言ってもいいかもしれませんが、Ruby は C# よりもはるかに表現力があり、エレガントで、きれいであることを知っておく必要があります。また、Ruby のコードを最初から隠すべきではないという可能性もあります。;)

于 2010-07-08T15:27:05.627 に答える
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 に答える