今天遇到一个奇怪的问题,我之前写的一个函数在我弟弟的机器上编译出错。代码如下:
%%将list [k1,v1,k2,v2...]转换成map {k1=>v1,key2=>v2...} -spec(convert_list_to_map(List::list()) -> map()). convert_list_to_map(List) when is_list(List)-> F = fun(X,{IsPass,Key,Result})-> if not(IsPass)-> {true,X,Result}; true -> {false,{},Result#{Key=>X}} end end, {_,_,Return} = lists:foldl(F,{false,{},#{}},List), Return.
在我机器上表现正常,在我弟弟机器上总是报错
后来发现我俩的erl版本不一样,我用的是R18,在
http://stackoverflow.com/questions/29360793/illegal-use-of-variable-in-erlang-map
中提到
将 Result#{Key=>X} 改成 maps:put(Key,X,Result)
编译通过。