如何在CoffeeScript中定义方便的测量语法单位?

时间:2012-09-20 06:12:53

标签: coffeescript units-of-measurement

在使用Groovy的this example中,作者描述了如何使用Groovy技巧来定义测量单位的语法,以便您可以编写,例如,

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

让它按预期工作。有没有办法定义一个类似的聪明语法,用于将测量单位与CoffeeScript中的数字相关联? (我对CoffeeScript很新;对不起,如果这已经解决了,或者有明显的答案。)

3 个答案:

答案 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)

也有效。