0

クラスを可能な限りカプセル化しようとしています。このような send メソッドを使用してはいけない理由はありますか?

class MyClass

  def self.join_two_strings(first, second)
    new.send(:join_two_strings, first, second)
  end

  def join_two_strings(first, second)
    first + second
  end

  private :join_two_strings
end
4

3 に答える 3

5

#join_two_strings実際にはインスタンス状態を必要としないため、クラス メソッドである必要があります。

class MyClass
  def self.join_two_strings(first, second)
    first + second
  end
end
于 2013-04-30T05:56:04.920 に答える
0

#send の使用に関する問題をより正確に呼び出すと、冗長ではなく、設計意図が不明瞭になります。冗長性 (省略形ではなく完全な単語を使用するなど) は、設計の意図を明らかにし、読者がコードを理解するのに必要な時間を短縮するのに役立ちます。あなたのコード例では、読者はあなたが達成したいのは2つの文字列の単なる結合であるとは信じていません。彼らはより深い意味を探し続けてから、単純なことを行うための単なる複雑な方法であると認めます(そしておそらくコードをリファクタリングします)クリスがしたように)。#send 自体に関しては、恐れずに使用してください。#send をメソッドのプライバシーを恣意的に軽視するツールとして使用するべきではありませんが、一方で、Ruby メソッドはメッセージであり、理由がある場合はそれを明示することを心配する必要はありません。

于 2013-04-30T06:35:39.763 に答える