Mã này là dưới đây:mẫu bất hợp pháp trong bản đồ của Erlang
-module(map_demo).
-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.
khi biên dịch mã kiểm tra vào vỏ Erlang, nó báo cáo các lỗi sau đây:
1> c(map_demo).
map_demo.erl:7: illegal pattern
map_demo.erl:8: variable 'N' is unbound
map_demo.erl:10: illegal use of variable 'H' in map
map_demo.erl:7: Warning: variable 'H' is unused
error
Tôi mới trong Erlang, và không thể tìm thấy bất cứ điều gì sai trái. Làm thế nào để sửa nó?
Điều gần nhất tôi có thể tìm thấy là đây là "lỗi đã biết". Những người erlang này có nghiêm trọng không? Đây là một lỗi rất lớn trong trường hợp đó! Tôi nghĩ rằng đây là thứ mà bạn đã lấy từ "Lập trình Erlang" của chính Joe Armstrong, và tôi bị sốc với chính cốt lõi rằng điều này không hiệu quả! –
Kể từ Erlang/OTP 18.0 mã này ném lỗi "chỉ" cho dòng 7, 8 vì các biến bị ràng buộc là hợp pháp để sử dụng trong bản đồ: ________________________________________________________________________________ 1> 'K = thecake, # {K => isalie} .' _______________________________________________' # { thecake => isalie} ' –
đang chạy phiên bản 20, và đây là một lỗi? Có lẽ tôi sẽ nghiên cứu thêm một chút trước khi nổi giận, nhưng ... https://stackoverflow.com/questions/44247735/map-pattern-matching-in-erlang-unexpected-error-unbound – alexakarpov