2016-10-15 27 views
6

在每隔一段时间你得到一个编译错误是这样的:Elm中的保留关键字是什么?

It looks like the keyword `port` is being used as a variable. 

这很烦人。这些关键字是否有完整的正式列表?我已经找到了where the error messages are generated,但我无法找到关键字实际定义的位置。

同时,这里是我发现通过浏览syntax页面,并在REPL试图关键字的关键字可能不完整或不正确的列表:

  • 其中
  • 模块
  • 曝光
  • 类型
  • 端口
  • 进口
  • infixr
  • 如果
  • 其他
  • 然后
+0

不知道是否有这样的列表,但再次,我发现编译器为我执行查找要容易得多。保存我手动查看某个列表以查明我的变量名称是否为保留关键字。 – wintvelt

+1

@wintvelt我同意编译器对于常规开发是足够好的,但是当开发代码生成器时,需要在代码到达编译器之前清理输入。 –

回答

7

按照elm-compiler source codelist of reserved keywords是:

keywords = 
    Set.fromList 
    [ "if", "then", "else" 
    , "case", "of" 
    , "let", "in" 
    , "type" 
    , "module", "where" 
    , "import", "exposing" 
    , "as" 
    , "port" 
    ] 

编辑: 实际上还有一些关键字(通过回购中的searching for "reserved"找到) 我找到了:infixinfixl,infixr。 OP也注意到了infixr

+0

“其中”可能不是其中之一(榆树没有'...其中...... = ...'语法,只有'let ... = ... in ...' –

+0

@dotcs'你可以输入'f(infix)= 2 * infix'并且它可以正常工作 –

+1

@MartinJaniczek''where''绝对是一个保留字,尝试输入'f(where)= 2 * where'在REPL中查看错误。 –