2

データベーステーブルからデータを取得すると、配列が作成されます。一部のフィールドはdecimal&moneyフィールドとして定義され、配列内ではBigDecimalとして表されます。

これらの配列値を使用してCSVファイルにデータを入力しますが、問題は、すべてのBigDecimal値がデフォルトでScientific形式(BigDecimal to_sメソッドのデフォルトの動作)で表されることです。to_s('F')を使用して値を表示できますが、デフォルトをオーバーライドするにはどうすればよいですか?

4

3 に答える 3

2

これは@Farrelの回答に基づいていますが、メソッドの名前空間を役に立たないold_xyzメソッドで汚染することはありません。また、デフォルトの引数を直接使用してみませんか?

class BigDecimal
  old_to_s = instance_method :to_s

  define_method :to_s do |param='F'|
    old_to_s.bind(self).(param)
  end
end

Ruby 1.8では、これは少し見苦しくなります。

class BigDecimal
  old_to_s = instance_method :to_s

  define_method :to_s do |param|
    old_to_s.bind(self).call(param || 'F')
  end
end

または、上記のコードで表示される警告が気に入らない場合は、次のようにします。

class BigDecimal
  old_to_s = instance_method :to_s

  define_method :to_s do |*param|
    old_to_s.bind(self).call(param.first || 'F')
  end
end
于 2010-02-26T11:36:25.960 に答える
1
class BigDecimal
  alias old_to_s to_s

  def to_s( param = nil )
      self.old_to_s( param || 'F' )
   end
end
于 2010-02-25T15:26:30.003 に答える
0

Rubyはこれを簡単にします。見よ:

class BigDecimal
  def to_s
    return "Whatever weird format you want"
  end
end

# Now BigDecimal#to_s will do something new, for all BigDecimal objects everywhere.

この手法はモンキーパッチと呼ばれます。名前から推測できるように、慎重に使用する必要があります。しかし、この使用法は私には合理的なようです。

于 2010-02-25T15:22:55.593 に答える