2015-05-14 27 views
1

這是我的代碼片段。在Erlang函數中傳遞地圖類型參數抱怨錯誤

%% test.erl 
-export([count_characters/1]). 

count_characters(Str) -> 
    count_characters(Str, #{}). 

count_characters([H|T], #{H := N} = X) -> 
    count_characters(T, X#{H := N+1}); 
count_characters([H|T], X) -> 
    count_characters(T, X#{H => 1}); 
count_characters([], X) -> 
    X. 

%% ErShell 
1> c(test). 
test.erl:19: illegal use of variable 'H' in map 
test.erl:20: illegal use of variable 'H' in map 
test.erl:20: variable 'N' is unbound 
test.erl:22: illegal use of variable 'H' in map 
error 

我只是不知道爲什麼會這樣抱怨錯誤,因爲下面的代碼只是制定了罰款:

%% test2.erl 
birthday(#{age := N} = Person) -> 
    Person#{age := N+1}. 

%% ErShell 
1> c(test2). 
2> test2:birthday(#{age => 333}). 
#{age => 334} 

在此先感謝。

回答

5

原因很簡單:地圖還沒有完全實現。快來看看看看:http://learnyousomeerlang.com/maps

此外,你可能會想到的替代實現,用這已經可以與地圖的東西:

count_characters(Str) -> count_characters(Str, #{}). 

count_characters([H|T], Map) -> 
    N = maps:get(H, Map, 0), 
    count_characters(T, maps:put(H, N + 1, Map)); 
count_characters([], Map) -> Map. 
+1

正如一個附加:你可能會發現你的代碼喬編程Erlang,第二版,呃?它已經在勘誤表上了。它將在未來的某個時間起作用。 –

相關問題