问题描述
在辅助函数中,我正在执行模式匹配以修改数据结构。我想修改数据结构,然后返回修改后的数据。在我的方法中,返回类型是 unit()。我需要它来返回修改后的 hash_table。
我试过了:
let helperfunction firstlist secondlist hash_table =
match(firstlist,secondlist) ->
| (CUSTOMTYPE::tail,CUSTOMOBJA(a)::CUSTOMOBJB(b)::anotherTail) -> Hashtbl.add hash_table "key" (a+b); hash_table
还有,
let helperfunction firstlist secondlist hash_table =
match(firstlist,secondlist) ->
|(CUSTOMTYPE::tail,CUSTOMOBJA(a)::CUSTOMOBJB(b)::anotherTail) -> let aa = Hashtbl.add hash_table "key" (a+b); hash_table
它们都没有像我想要的那样运行。我需要的类似 Python 语言的功能是:
def helperfunction (HashMap hm,int ValuetoBeAdded):
hm.add("key",ValuetoBeAdded)
return hm
我对函数式编程很陌生。
解决方法
Hashtbl
是命令式(和可变的)数据结构,所以你不需要返回它,但如果你愿意,你可以。您的 Python 示例可以在 OCaml 中以如下方式进行翻译:
let helper_function hash_table value_to_be_added =
let () = Hashtbl.add hash_table "key" value_to_be_added in
hash_table
你的第二个例子很糟糕,但我在第一个例子中没有看到任何问题(除了模式匹配的非穷尽性)。