как сменить имя хоста в эрланге - PullRequest
2 голосов
/ 17 октября 2011

это мой kvs.erl:

-module(kvs).
-export([start/0, store/2, lookup/1]).

start() -> register(kvs, spawn(fun() -> loop() end)).

store(Key, Value) -> rpc({store, Key, Value}).

lookup(Key) -> rpc({lookup, Key}).

rpc(Q) ->
    kvs ! {self(), Q},
    receive
    {kvs, Reply} ->
        Reply
    end.

loop() ->
    receive
    {From, {store, Key, Value}} ->
        put(Key, {ok, Value}),
        From ! {kvs, true},
        loop();
    {From, {lookup, Key}} ->
        From ! {kvs, get(Key)},
        loop()
    end.

, когда я запускаю erlang, используя: erl -name zhao -setcookie abc

и затем: rpc: call (fifar@huihua.sohu-inc.com, КВС, магазин, [погода, холод]).

это показывает ошибку:

(zhao@zjm1126.sohu-inc.com)1> rpc:call(fifar@huihua.sohu-inc.com,kvs,store,[weather,cold]).         
** exception error: bad argument in an arithmetic expression
     in operator  -/2
        called as 'fifar@huihua.sohu' - 'inc.com'

Я думаю, что речь идет об имени хоста Linux,

, но я использую эту оболочку Linux: имя хоста -a

itне могу показать "huihua.sohu-inc.com"

так что я могу сделать,

спасибо

1 Ответ

5 голосов
/ 17 октября 2011

Глядя на описание ошибки, вы обнаружите ошибку в бинарном операторе "-". вам нужно только изменить

(zhao@zjm1126.sohu-inc.com)1> rpc:call(fifar@huihua.sohu-inc.com,kvs,store,[weather,cold]).

до

(zhao@zjm1126.sohu-inc.com)1> rpc:call('fifar@huihua.sohu-inc.com',kvs,store,[weather,cold]).

И ваш код заработает. Консоль Эрланга видит fifar@huihua.sohu и inc.com как два отдельных атома и видит fifar@huihua.sohu-inc.com как разностная операция между двумя атомами . Я советую вам следовать этой цитате из справочника erlang :

Атом - это литерал, константа с именем. Атом должен быть заключен в одинарные кавычки ('), если он не начинается со строчной буквы или содержит другие символы, кроме буквенно-цифровых символов, подчеркивания (_) или @.

...