Tôi đang viết mô-đun ejabberd để lọc gói. Tôi cần lấy tên máy chủ để lấy một số cấu hình bằng cách sử dụng gen_mod:get_module_opt()
.Cách tạo biến toàn cục trong Erlang
Tôi có 4 chức năng quan trọng:
start(Host, _Opt)
: Đây là một chức năng ejabberd để nạp mô-đun của tôi. Tôi nhận được nguyên tửHost
tại đâyfilter_packet({From, To, XML})
: Đây là móc lọc gói của tôi. Tôi không thể chuyển các tham số tùy chỉnh cho hàm này, vì nó là một móc trong ejabberd.get_translation(XmlData)
:filter_packet()
gọiget_translation()
trong một vòng lặpfetch_translation(XmlData)
: gọi đệ quy từget_translation()
. Đây là nơi tôi đang gọigen_mod:get_module_opt()
và do đó cầnHost
.
Câu hỏi của tôi là, làm thế nào tôi có thể mất Host
từ start()
và đặt nó trong một biến toàn cầu, do đó fetch_translation
có thể truy cập vào nó?
Thx zed. Mô-đun biên dịch ok nhưng đưa ra lỗi 'badarg' cho 'ets: new (my_table, [named_table, protected, set, {keypos, 1}]),' – Adil
Nếu bảng 'my_table' tồn tại, bạn sẽ nhận được badarg . Bạn cần phải kiểm tra xem bảng đã tồn tại chưa, hoặc bọc nó trong một khối try-catch – Zed
Tôi không tạo 'my_table' ở bất kỳ đâu, ngoại trừ như đã nêu ở trên. – Adil