Мейсон - Передача карты строк в сервисный вызов

Я пытаюсь передать карту строк в сервисный вызов, который я делаю из моего файла .mi.

Я пытаюсь сделать следующее, но это дает мне синтаксическую ошибку в ");".

  my $serviceResult = PI::employee::register::Service->saveAttributes(
          attributesMap => map { ('session-id' => $Session->getSessionId())}
      );

Если я вместо этого попытаюсь

 my $serviceResult = PI::employee::register::Service->saveAttributes(
          attributesMap => map { 'session-id' => $Session->getSessionId()}
      );

Пишет, что недостаточно аргументов для карты. :(


person Andy897    schedule 21.11.2015    source источник
comment
Похоже, это вообще не о Мейсоне. Вместо этого, похоже, речь идет о том, как правильно использовать ваш класс PI::employee::register::Service. (Не говоря уже о map.) Мы не собираемся знать, каким должен быть его API.   -  person darch    schedule 21.11.2015
comment
Речь идет только о масоне. PI просто имеет в виду Perl-клиент, который я использую для доступа к сервису.   -  person Andy897    schedule 21.11.2015
comment
Я получаю синтаксическую ошибку каменщика .. теперь это имеет смысл для вас   -  person Andy897    schedule 21.11.2015
comment
Вы сообщаете об ошибках синтаксического анализа. Потому что вы не производите действительный Perl. Мейсон - не твоя проблема.   -  person darch    schedule 21.11.2015
comment
Посмотрите на хэши perl и stackoverflow.com/questions/15537157/perl-nested-structures.   -  person andlrc    schedule 21.11.2015


Ответы (1)


Функция Perl map, описанная в perldoc -f map, принимает BLOCK (или EXPR) и LIST. Вы не предоставляете LIST, поэтому ваш код не компилируется.

Вы можете избавиться от ошибки синтаксического анализа, предоставив список:

map { ('session-id' => $Session->getSessionId()) } (1)

Однако это почти наверняка не то, что вам нужно. Вы используете map по ошибке. Вам нужна карта от ключей к значениям, а функция map не для этого.

Вместо вызова map, похоже, вам нужен hashref, например

{ 'session-id' => $Session->getSessionId() }

.

person darch    schedule 21.11.2015
comment
Функция принимает три параметра - String, String, Map‹String, String› - person Andy897; 21.11.2015
comment
Таким образом, очевидно, что attributesMap => map { 'session-id' => $Session->getSessionId()} (1) не может быть правильным. - person darch; 21.11.2015
comment
Поэтому, пожалуйста, предложите .. как мне передать карту. :( .. все, что я хочу сделать, это передать карту с идентификатором сеанса ключа и значением $Session->getSessionId() - person Andy897; 21.11.2015
comment
Я обновил ответ, чтобы отразить новые вещи, которые я узнал об API, который вы вызываете. - person darch; 21.11.2015