2010-10-11 22 views
8

tôi bắt đầu một quá trình như sauErlang lỗi khi đẻ trứng một quá trình

start() -> 
register (dist_erlang, spawn(?MODULE, loop, [])), 
ok. 

Nhưng nhận được lỗi sau khi cố gắng chạy start().

Error in process <0.62.0> with exit value: {undef,[{dist_erlang,loop,[]}]}

Mô-đun được gọi là dist_erlang.

Tôi đang làm gì sai?

Cảm ơn

Trả lời

14

Dựa trên previous question của bạn, chức năng loop bạn mất một tham số, không ai sánh kịp. Erlang đang tìm kiếm loop/0 nhưng không thể tìm thấy nó vì chức năng của bạn là loop/1.

Tham số thứ ba là spawn/3 là một danh sách tham số để chuyển đến hàm của bạn và trong trường hợp bạn hiển thị danh sách trống. Hãy thử:

register (dist_erlang, spawn(?MODULE, loop, [[]])) 

Trong trường hợp này, tham số thứ ba là danh sách chứa một phần tử (danh sách trống).

+0

Tôi thực sự đánh giá cao sự giúp đỡ của bạn. Cảm ơn :) – jarryd

10

Mặc dù câu hỏi là cũ, tôi đăng những gì đã giúp tôi khi tôi đã đấu vật với trình biên dịch Erlang.

này (không đầy đủ) đoạn mã

-export([start/0]). 

start() -> 
    Ping = spawn(?MODULE, ping, [[]]), 
    ... 

ping(State) -> 
    receive 
     ... 
    end. 

thất bại với lỗi:

=ERROR REPORT==== 2-Sep-2013::12:17:46 === 
Error in process <0.166.0> with exit value: {undef,[{pingpong,ping,[[]],[]}]} 

cho đến khi bạn xuất một cách rõ ràng ping/1 chức năng. Vì vậy, với xuất khẩu này:

-export([start/0, ping/1]). 

hoạt động. Tôi nghĩ rằng sự nhầm lẫn đến từ một số ví dụ từ Learn You Some Erlang for great good nơi các module đôi khi có

-compile(export_all). 

đó là dễ dàng để bỏ

+2

Chúc mừng! Điều này giải quyết được vấn đề chính xác mà tôi có. :) Tôi tìm thấy nó lạ rằng bạn sẽ phải xuất khẩu một chức năng mà bạn dự định sử dụng tại địa phương (thông qua đẻ trứng). – Babyburger

Các vấn đề liên quan