1

Groovyを使用するこのでは、作成者は、Groovyのトリックを使用して、測定単位の構文を定義する方法について説明します。たとえば、次のように記述できます。

3.cm + 12.m * 3 - 1.km

期待どおりに機能します。CoffeeScriptで測定単位を数値に関連付けるための同様に巧妙な構文を定義する方法はありますか?(私はCoffeeScriptを初めて使用します。これがすでに解決されているか、明らかな答えがある場合は申し訳ありません。)

4

3 に答える 3

2

BasicWolfの答えは最も慣用的なものだと思います。これらの関数を独自のモジュールに入れて、グローバル名前空間やJS組み込みオブジェクトを汚染せずに使用したい場合にのみインポートできるからです。

Groovyでは、 Categoryを使用して、組み込みクラスが追加のメソッドで汚染されないようにすることができます。

ただし、組み込みオブジェクトに何かを追加する必要がない場合は、さらに一歩進んで、Object.definePropertiesGroovyの例とまったく同じようにこの構文を作成するために使用できます:)

Object.defineProperties Number.prototype,
  km: {get: -> @ * 1000}
  m:  {get: -> @}
  cm: {get: -> @ * 0.01}

console.log 3.cm + 12.m * 3 - 1.km # -> -963.97
于 2012-09-20T15:24:21.303 に答える
1

私はそれをお勧めしませんが、これはうまくいきます:

Number::cm = ->
  this / 100

Number::m = ->
  this

Number::km = ->
  this * 1000


3.cm() + 12.m() * 3 - 1.km() # evaluates to -963.97

3.cm関数cmを呼び出す代わりに参照するため、括弧を取り除くことはできません。

于 2012-09-20T08:33:17.690 に答える
0

残念ながら、CoffeeScript ではそのようにすることはできません。できることは次のようなものです (CoffeeScript と JavaScript の両方で):

cm(3) + m(12) * 3 - km(1)

ここでcm()m()km()は、値をメートルなどに変換する関数です。CoffeeScriptに関しては、次の式

(cm 3) + 3 * (m 12) - (km 1)

も有効です。

于 2012-09-20T06:23:45.783 に答える