运营商:: OCaml

Operator :: OCaml

我是 OCaml 的初学者,正在尝试构建一个解析器,我想要一个列表来存储我 class 中的所有方法。这是我的 .mly 文件中的一部分。

init_method_list: 
    { [] }
    | method_list method_decl { List.rev() }
;

method_list:
    method_decl { [  ] }
    | method_list method_decl {  ::  }
;

谁能准确解释一下这是怎么回事?特别是 :: 操作。一直在谷歌搜索,但在文档中找不到操作员。

我知道列表可以是空的,或者我们进行正确的递归调用以使用 class 中的所有方法填充它。 method_decl 仅查找表示方法的特定标记组合的匹配项。

正如我在评论中所说,运算符 :: 用于将类型 'a 的元素连接到类型 'a list 的列表。一个小例子:

1 :: [2;3] 生成列表 [1;2;3] 所以是的,它将元素添加到列表的前面。

正如其他人所说,:: 将一个元素连接到相同类型的列表中。另外,如果需要连接两个列表,可以使用@符号,例如:

[1;2;3]@[4] 将给出列表 [1;2;3;4]