Groovyを使用するこの例では、作成者は、Groovyのトリックを使用して、測定単位の構文を定義する方法について説明します。たとえば、次のように記述できます。
3.cm + 12.m * 3 - 1.km
期待どおりに機能します。CoffeeScriptで測定単位を数値に関連付けるための同様に巧妙な構文を定義する方法はありますか?(私はCoffeeScriptを初めて使用します。これがすでに解決されているか、明らかな答えがある場合は申し訳ありません。)
Groovyを使用するこの例では、作成者は、Groovyのトリックを使用して、測定単位の構文を定義する方法について説明します。たとえば、次のように記述できます。
3.cm + 12.m * 3 - 1.km
期待どおりに機能します。CoffeeScriptで測定単位を数値に関連付けるための同様に巧妙な構文を定義する方法はありますか?(私はCoffeeScriptを初めて使用します。これがすでに解決されているか、明らかな答えがある場合は申し訳ありません。)
BasicWolfの答えは最も慣用的なものだと思います。これらの関数を独自のモジュールに入れて、グローバル名前空間やJS組み込みオブジェクトを汚染せずに使用したい場合にのみインポートできるからです。
Groovyでは、 Categoryを使用して、組み込みクラスが追加のメソッドで汚染されないようにすることができます。
ただし、組み込みオブジェクトに何かを追加する必要がない場合は、さらに一歩進んで、Object.defineProperties
Groovyの例とまったく同じようにこの構文を作成するために使用できます:)
Object.defineProperties Number.prototype,
km: {get: -> @ * 1000}
m: {get: -> @}
cm: {get: -> @ * 0.01}
console.log 3.cm + 12.m * 3 - 1.km # -> -963.97
私はそれをお勧めしませんが、これはうまくいきます:
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
を呼び出す代わりに参照するため、括弧を取り除くことはできません。
残念ながら、CoffeeScript ではそのようにすることはできません。できることは次のようなものです (CoffeeScript と JavaScript の両方で):
cm(3) + m(12) * 3 - km(1)
ここでcm()
、m()
、km()
は、値をメートルなどに変換する関数です。CoffeeScriptに関しては、次の式
(cm 3) + 3 * (m 12) - (km 1)
も有効です。