咖啡和枚举值

问题描述 投票:9回答:6

我正在研究coffeescript(http://coffeescript.org/)中的枚举/常量的概念,并想出了下面的以下代码,看起来不错。我如何才能将其改进为适合枚举的东西呢?谷歌对此的搜索尚未显示满意。

class SomeService

  @SomeEnumValue : 400
  @SomeOtherValue : 402

  someFunc: ->
    SomeService.SomeEnumValue 

ok = new SomeService()
alert ok.someFunc()

if (ok.someFunc() == SomeService.SomeEnumValue) then alert ' some enum value'
enums coffeescript
6个回答
19
投票

枚举的整个概念在动态语言中是没有用的,就像元组,类型列表,地图和许多其他东西一样,而Javascript(咖啡脚本)是动态的。在使用动态语言时,您只需要忘记类型检查并使用现有的更通用的结构来解决您的问题。使用数组代替列表和元组,使用对象代替映射和枚举,只相信传递给函数的值的类型,但对代码进行大量的单元测试。无论好坏(对于更糟糕的IMO),这都是在这里完成的工作。

在您的情况下,我建议仅将值存储在一个单例对象中,如下所示:

HTTPStatusCodes = 
  ok : 200
  badRequest : 400
  unauthorized : 401

并且像这样访问它:

class SomeService
  okCode: ->
    HTTPStatusCodes.ok
  failureCodes: ->
    code for key, code of HTTPStatusCodes when code >= 400

5
投票

[我知道我参加晚会很晚,但是为了后代,我提出了一个“ coffeethonic”解决方案(本着少打字的精神:]]

[ a, b, c ] = [1..3]

4
投票

我强烈反对这样的说法:由于Javascript的动态特性,Enums毫无用处,或者Enums的荣耀散列更少。


2
投票
Colors = Object.freeze({
  RED: 'red'
  GREEN: 'green'
  BLUE: 'blue'
})
console.log Colors.RED
# red

1
投票

我开始想知道咖啡脚本中的enums,然后以解决方案I published on github (available in npm, bower, meteor too)结束。我尝试开发类似Java的枚举,但是鉴于原型继承和经典继承coffeescript所依赖的混合,它甚至更加灵活。


0
投票

对于正在寻找更简单解决方案的人们,不需要故障保护,因为密钥的值无关紧要:

© www.soinside.com 2019 - 2024. All rights reserved.