coffeescript和enum值

fin*_*elp 9 enums coffeescript

我在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'
Run Code Online (Sandbox Code Playgroud)

Nik*_*kov 19

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

在你的情况下,我建议只将值存储在单个对象中,如下所示:

HTTPStatusCodes = 
  ok : 200
  badRequest : 400
  unauthorized : 401
Run Code Online (Sandbox Code Playgroud)

并像这样访问它:

class SomeService
  okCode: ->
    HTTPStatusCodes.ok
  failureCodes: ->
    code for key, code of HTTPStatusCodes when code >= 400
Run Code Online (Sandbox Code Playgroud)

  • @Darthfett不要把我的话脱离背景.我说它们在动态语言中没用****.之所以如此,是因为动态语言中没有类型限制,例如,它会消除元组和数组之间的边界.另一方面,在静态语言中,像这样的结构是必不可少的. (6认同)
  • 我喜欢你的解决方案,这对我来说非常完美.我明白你的观点是,在类型限制方面,emums在动态语言中是无用的,但在代码可读性方面,它们绝对必不可少.您的解决方案提供了完美. (4认同)
  • 元组和地图怎么没用? (3认同)
  • 附录:Python有元组,它有它的用途,因为它们是不可变的,你可以用它们作为字典中的键. (2认同)

小智 5

我知道我迟到了,但为了后代,我提出了一个"coffeethonic"解决方案(本着打字少的精神):

[ a, b, c ] = [1..3]
Run Code Online (Sandbox Code Playgroud)