如何在CoffeeScript中定义方便的度量单位语法?
在使用Groovy的过程中,作者介绍了如何使用Groovy技巧定义度量单位的语法,以便您可以编写,例如如何在CoffeeScript中定义方便的度量单位语法?,coffeescript,units-of-measurement,Coffeescript,Units Of Measurement,在使用Groovy的过程中,作者介绍了如何使用Groovy技巧定义度量单位的语法,以便您可以编写,例如 3.cm + 12.m * 3 - 1.km 让它按预期工作。在CoffeeScript中,有没有办法定义一种类似的聪明语法,将测量单位与数字关联起来?(我对CoffeeScript非常陌生;如果这是一个已经解决或有明显答案的问题,我很抱歉。)不幸的是,用CoffeeScript无法做到这一点。您可以做的是(在CoffeeScript和JavaScript中): 这里的cm(),m(),km
3.cm + 12.m * 3 - 1.km
让它按预期工作。在CoffeeScript中,有没有办法定义一种类似的聪明语法,将测量单位与数字关联起来?(我对CoffeeScript非常陌生;如果这是一个已经解决或有明显答案的问题,我很抱歉。)不幸的是,用CoffeeScript无法做到这一点。您可以做的是(在CoffeeScript和JavaScript中): 这里的
cm()
,m()
,km()
是将数值转换为仪表等的函数。就CoffeeScript而言,以下表达式
(cm 3) + 3 * (m 12) - (km 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
,而不是调用它。我认为这是最常用的,因为您可以在自己的模块中使用这些函数,并且只在您想要使用它们时才导入它们,而不必污染全局名称空间或JS内置对象
在Groovy中,您可以使用一个函数来避免用额外的方法污染内置类
但是,如果您不关心向内置对象添加内容,那么可以更进一步,使用使其语法与Groovy的示例完全相同:)
最后一个片段不正确。它编译成:
cm(3+3*m(12-km(1))
。您可以使用(cm3)+(m3)*3-(km1)
,这与IMO的避免括号座右铭更加一致:)谢谢您的更正。我个人总是用括号:)是的。CoffeeScript中的括号是一个热门话题:P
Number::cm = ->
this / 100
Number::m = ->
this
Number::km = ->
this * 1000
3.cm() + 12.m() * 3 - 1.km() # evaluates to -963.97
Object.defineProperties Number.prototype,
km: {get: -> @ * 1000}
m: {get: -> @}
cm: {get: -> @ * 0.01}
console.log 3.cm + 12.m * 3 - 1.km # -> -963.97