0

とても簡単です。YYYYMMDDとしてフォーマットされた日付でやりたいことは次のとおりです。

month = datestring[0:2]
day = datestring[2:2]
year = datestring[4:4]
return "#{month}/#{day}/#{year}"

問題は、Rubyについてこれを理解したことがないということです。

  • モジュール?
  • ミックスイン?
  • 他に何かありますか?

何をしたいのかはわかっていますが、どのようなファイルや構造体を入れるのかわかりません。モジュールの場合は、メソッド名の前にモジュールの名前を付けますか?

module DateHelper
  def DateHelper.transform(datestring)
     ...
  end
end

なぜ、またはなぜ私はこれをしないのですか?私にとって精神的な障害となっている何かを片付けるのを手伝ってくれてありがとう。

4

2 に答える 2

2

モジュールの代わりに、構成付きのオブジェクトの使用を検討してください。

class DateString
  def initialize(date)
    @date_string = date
  end

  def format
    ...
  end
end

今、あなたはすることができます:

my_date_string = DateString.new("20121203")
puts my_date_string.format # => "12/03/2012"

この回答はあなたの質問のルビー哲学の部分をカバーしていますが、あなたが多くの日付フォーマットをしているなら、あなたのためにすでにそれをしている宝石を使うことを検討してください。

于 2012-12-03T23:29:39.100 に答える
1

あなたの質問のコードはミックスインを示唆しています。これは1つの可能な方法です。それはより慣用的に次のように書かれています:

module DateHelper
  def date_to_some_format(date)
    ...
  end
end

このメソッドはインスタンスメソッドであり、任意のクラスの他のメソッドと衝突しない可能性のある名前を持っていることに注意してください。クラスレベルでメソッドを使用できるようにする場合、これを行う1つの方法は次のとおりです。

class SomeClass
  class << self
    include DateHelper
    ...
  end
end

これは、クラスレベルのミックスインを処理する1つの方法です。他にもあります。

ミックスインが必要かどうかは、コンテキストによって異なります。日付の書式設定には、無関係なクラスのいたるところに繰り返されているコードが含まれていますか?二度と使用しないのは一回限りですか?状態を覚える必要がありますか?日付形式は非常に便利で、コアライブラリの拡張機能になる可能性がありますか?これらの質問への回答は、コードをミックスインで処理するか、他の方法で処理するかを示唆します。(ミックスインは通常、モジュールを使用してRubyに実装されます。)Rubyを実際に学習することの一部は、さまざまなコンテキストでこれらの質問に対する答えを理解することです。この点に関して簡単な答えはほとんどなく、ある程度、慣習、個人的な好み、家のスタイルに依存します。

余談ですが、探している日付形式を取得する1つの方法は、次のとおりです(YYYYMMDDの入力日付形式に従います)。

Date.strptime("20100101", "%Y%m%d").strftime("%m/%d/%Y")

コード内で必ずしもこのようにチェーン化する必要はありません。たとえば、Brendan Bensonの応答は優れたアプローチを提供しますが、これを1か所で行うだけであれば特別なことは必要ないかもしれません。

于 2012-12-04T00:22:32.587 に答える