Как связать хеш-ссылку на Perl с хеш-картой Java? - PullRequest
2 голосов
/ 28 сентября 2019

Я использую Inline :: Java в Perl, и мне нужно передать хэш методу Java.

Я пробовал следующий код:

my $obj = new Pod_101() ;
my %data = ('input' => 45, 'Lisa' => 30, 'Kumar' => 40);
my $val = $obj->evaluate(\%data, "\${input*12}");

Это приводит к следующей ошибке:

Невозможно преобразовать HASH (0x556322c62368) в объект java.util.Map в /usr/lib/x86_64-linux-gnu/perl5/5.26/Inline / Java / Object.pm строка 107.

1 Ответ

2 голосов
/ 28 сентября 2019

Похоже, что передача хэшей Perl в Java не поддерживается напрямую.Вот пример того, как вы можете обойти эту проблему, передав вместо этого хэш-ключи и значения в виде массивов:

use Inline Java => <<'END' ;
   import java.util.* ;

   class Pod_101 {
      public Pod_101() {
      }

      public HashMap get_hash (String keys[], Integer vals[] ){
         HashMap<String, Integer> hash = new HashMap<>() ;
         for(int i= 0; i < keys.length; i++){
             hash.put(keys[i], vals[i]);
         }
         return hash;
      }
      public Integer evaluate(HashMap<String, Integer> h, String foo){
          return h.get("input") ;
      }
   }
END

my $obj = Pod_101->new() ;
my %data = ('input' => 45, 'Lisa' => 30, 'Kumar' => 40);
my $h = $obj->get_hash( [keys %data], [values %data]) ;
my $val = $obj->evaluate($h, "\${input*12}");
print "$val\n";

Вывод :

45
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...