Можно ли вызвать или скаляр или выстроить ли касательно быть массивом в Perl?

Я нашел способ более легкого решения этой проблемы, который также изменил сгенерированный импорт, такой как com.test.testpackagechange.R, и занимает всего около минуты.

Ваш первый шаг - открыть Android Studio и открыть замену все окна (Mac: cmd + shift + R, Windows я предполагаю: ctrl + shift + R). Введите имя старого пакета и имя под новым именем пакета. Нажмите «Найти». Это может занять некоторое время, поскольку оно также просматривает созданные объекты. Если у вас более 1000 ударов, просто нажмите «Продолжить».

После того, как вы сделали это, нажмите «Заменить все», чтобы заменить старое имя пакета новым 1.

Теперь закройте Android Studio и перейдите в Finder на Mac или Windows Explorer в Windows. Измените имя папок на новое имя пакета, например:

Теперь откройте Android Studio еще раз. Gradle будет синхронизироваться, и ваше имя пакета должно быть изменено на новое.

Я нашел, что это самый простой и тот, который охватывает все области, такие как сгенерированные файлы.

28
задан Community 9 September 2008 в 23:13
поделиться

5 ответов

im, не уверенный, существует любой другой путь, чем:

$result = [ $result ]   if ref($result) ne 'ARRAY';  
foreach .....
26
ответ дан svrist 14 October 2019 в 11:29
поделиться

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

sub call_to_service
{
    my $returnValue = service::call();

    if (ref($returnValue) eq "ARRAY")
    {
        return($returnValue);
    }
    else
    {
       return( [$returnValue] );
    }
}

Тогда можно всегда знать о возвращении ссылки на массив даже если это был только один объект.

foreach my $item (@{call_to_service()})
{
  ...
}
12
ответ дан user1917 14 October 2019 в 11:29
поделиться

Я осуществил бы рефакторинг код в цикле и затем сделал бы

if( ref $results eq 'ARRAY' ){
    my_sub($result) for my $result (@$results);
}else{
    my_sub($results);
}

, Конечно, я только сделал бы это, если бы код в цикле был нетривиален.

0
ответ дан Brad Gilbert 14 October 2019 в 11:29
поделиться

Я только что проверил это с помощью:

#!/usr/bin/perl -w
use strict;

sub testit {

 my @ret = ();
 if (shift){
   push @ret,1;
   push @ret,2;
   push @ret,3;
}else{
  push @ret,"oneonly";
}

return \@ret;
}

foreach my $r (@{testit(1)}){
  print $r." test1\n";
}
foreach my $r (@{testit()}){
   print $r." test2\n";
}

И, кажется, все работает хорошо, поэтому я думаю, что это как-то связано с результатом, возвращаемым из оказание услуг? Если у вас нет контроля над службой возврата, это может быть трудно взломать

0
ответ дан brian d foy 14 October 2019 в 11:29
поделиться

Ну, если вы не можете сделать ...

for my $result ( ref $results eq 'ARRAY' ? @$results : $results ) {
    # Process result
}

или это ...

for my $result ( ! ref $results ? $results : @$results ) {
    # Process result
}

тогда вам, возможно, придется попробовать что-то пугающе волосатое, как это! ....

for my $result ( eval { @$results }, eval $results ) {
    # Process result
}

и, чтобы избежать этой опасной строки, она становится ужасно уродливой !! ....

for my $result ( eval { $results->[0] } || $results, eval { @$results[1 .. $#{ $results }] } ) {
    # Process result
}

PS. Я предпочел бы абстрагировать его в примере с суб-вызовом call_to_service (), представленном reatmon.

2
ответ дан AndyG 14 October 2019 в 11:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: