1

数値を適切にフォーマットされた価格 (米ドル) として表示する関数があります。

var showPrice = (function() {
  var commaRe = /([^,$])(\d{3})\b/;
  return function(price) {
    var formatted = (price < 0 ? "-" : "") + "$" + Math.abs(Number(price)).toFixed(2);
    while (commaRe.test(formatted)) {
      formatted = formatted.replace(commaRe, "$1,$2");
    }
    return formatted;
  }
})();

私が言われたことから、繰り返し使用される正規表現は変数に格納して、一度だけコンパイルされるようにする必要があります。それがまだ正しいと仮定すると、このコードは Coffeescript でどのように書き直すべきでしょうか?

4

2 に答える 2

4

This is the equivalent in CoffeeScript

showPrice = do ->
  commaRe = /([^,$])(\d{3})\b/
  (price) ->
    formatted = (if price < 0 then "-" else "") + "$" + Math.abs(Number price).toFixed(2)
    while commaRe.test(formatted)
      formatted = formatted.replace commaRe, "$1,$2"
    formatted
于 2013-01-07T20:29:27.760 に答える
4

js2coffeeを使用して、JavaScript コードを CoffeeScript に変換できます。指定されたコードの結果は次のとおりです。

showPrice = (->
  commaRe = /([^,$])(\d{3})\b/
  (price) ->
    formatted = ((if price < 0 then "-" else "")) + "$" + Math.abs(Number(price)).toFixed(2)
    formatted = formatted.replace(commaRe, "$1,$2")  while commaRe.test(formatted)
    formatted
)()

私自身のバージョンは次のとおりです。

showPrice = do ->
  commaRe = /([^,$])(\d{3})\b/
  (price) ->
    formatted = (if price < 0 then '-' else '') + '$' +
                Math.abs(Number price).toFixed(2)
    while commaRe.test formatted
      formatted = formatted.replace commaRe, '$1,$2'
    formatted

繰り返し使用される正規表現については、わかりません。

于 2013-01-07T20:31:38.127 に答える