2016-06-30 2 views
2

Я читал в книге «Параллельный подход к разработке программного обеспечения» O'Reilly
и есть на странице 93 несколько примеров «Передача сообщений».сообщение, передаваемое переменной и «direct» в erlang

1> Pid = self(). 
<0.30.0> 
2> Pid ! hello. 
hello 
3> <0.30.0> ! hello. 
* 1: syntax error before: '<' 

Проблема заключается в том, что я не понимаю, почему есть ошибка синтаксиса, так как, когда я типа 1> Pid. я получаю результат <0.30.0>, так, что Составим разность между линией 2 и линии 3 (ожидать от тот факт, что это переменная)?

+0

Возможной дубликату [Отправка сообщения Pid Erlang ] (http://stackoverflow.com/questions/14169931/sending-message-pid-erlang) –

+0

Я видел эти вопросы, но я не спрашиваю, как отправить сообщение, я спрашиваю, почему я не могу отправить это одним из способов –

+0

Посмотрите на [третий ответ] (http://stackoverflow.com/a/14170100/409228) по этому вопросу. –

ответ

5

Там нет синтаксиса литералов идентификаторов процессов в Erlang. Причиной этого является то, что это почти никогда не имеет смысла: процесс, который вы хотите достичь, скорее всего, имеет различный pid каждый раз, когда запускается ваша программа.

Обычно вы создадите процесс, сохраните возвращаемое значение spawn в переменной, а затем используйте эту переменную для взаимодействия с процессом.

Если вы действительно хотите, чтобы получить полезный идентификатор процесса из его строкового представления, вы можете использовать функцию list_to_pid или pid получить PID из печатных компонентов:

list_to_pid("<0.30.0>") 
pid(0,30,0) 
+3

Что касается вашего последнего предложения, я бы также добавил возможное использование 'pid (0,30,0)' например. –

+0

@ A.Sarid Хорошая точка! Добавлен. – legoscia

4

Pid - это тип данных Erlang, который отображается в формате, который вы видите <0.30.0>. Но эта строка отображения автоматически не преобразуется в тип данных pid при вводе вручную.

http://erlang.org/doc/reference_manual/data_types.html

Смежные вопросы