在使用Groovy的this example中,作者描述了如何使用Groovy技巧来定义测量单位的语法,以便您可以编写,例如,
3.cm + 12.m * 3 - 1.km
让它按预期工作。有没有办法定义一个类似的聪明语法,用于将测量单位与CoffeeScript中的数字相关联? (我对CoffeeScript很新;对不起,如果这已经解决了,或者有明显的答案。)
答案 0 :(得分:2)
我认为BasicWolf's answer是最惯用的,因为你可以在自己的模块中使用这些函数,只在你想要使用它们时才导入它们,而不必污染全局命名空间或JS内置对象。 / p>
在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
答案 1 :(得分: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
而不是调用它。
答案 2 :(得分:0)
不幸的是,使用CoffeeScript不可能这样做。你可以做的就是(在CoffeeScript和JavaScript中):
cm(3) + m(12) * 3 - km(1)
此处cm()
,m()
,km()
是将值转换为例如{1}}的函数。米。就CoffeeScript而言,使用以下表达式
(cm 3) + 3 * (m 12) - (km 1)
也有效。