Существует ли встроенный “хеш для строкового представления” в Perl?

Вы должны знать, какие свойства должны быть слабыми, а какие сильными. Например, общепринятая практика объявляет, например, все IBOutlets как слабые, потому что они сохраняются представлением, исходящим из раскадровки, поэтому нет необходимости сохранять сильную ссылку в viewcontroller.

Другим примером может быть делегат, который всегда должен быть слабым, или он предотвратит освобождение делегата (главным образом другого viewcontroller), потому что держатель делегата еще жив.

В вашем случае str будет равен nil после init, потому что нет других ссылок на его содержимое. На самом деле вы должны получить предупреждение компилятора, если вы сделаете это.

Посмотрите на эту ветку с более подробным объяснением: Слабые и сильные атрибуты установщика свойств в Objective-C

15
задан Matthew Sainsbury 1 July 2016 в 14:32
поделиться

5 ответов

use Data::Dumper;
local $Data::Dumper::Terse = 1;
my $str = Dumper({a => 1, b => 2, c => 3});
43
ответ дан 30 November 2019 в 23:48
поделиться

См. также JSON:

#!/usr/bin/perl
use warnings; use strict;
use JSON;

my $data = {a => 1, b=> 2, c => 3};

print to_json($data);

Это производит:

{"c":3,"a":1,"b":2}
27
ответ дан 30 November 2019 в 23:48
поделиться

Существует Data::Dumper модуль, который один способ сделать этот вид преобразования.

11
ответ дан 30 November 2019 в 23:48
поделиться

Данные использования:: Дамп вместо Данных:: Самосвал. Это - в основном то же, кроме без того раздражения $VAR1 = ... хлам:

use Data::Dump "pp";
print pp({a => 1, b => 2, c => 3});

Производит:

{ a => 1, b => 2, c => 3 }

Если Вы находитесь в Windows, Данных:: Дамп прибыл предварительно установленный с ActivePerl начиная с версии 5.8.

6
ответ дан 30 November 2019 в 23:48
поделиться

Еще одно решение для ласточки:

sub pp {
  my $h = shift();
  qq[{${\(join',',map"$_=>$h->{$_}",keys%$h)}}]
}
print pp({a => 1, b => 2, c => 3});

Но используйте Data::Dumper вместо этого.

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

use Data::Dumper;
use Perl::Tidy;
sub pp {
        local $Data::Dumper::Terse    = 1;
        local $Data::Dumper::Indent   = 0;
        my $source = Dumper(@_);
        my $result;
        Perl::Tidy::perltidy(
                source      => \$source,
                destination => \$result,
                argv        => [qw(-pbp -nst)]
        );
        return $result;
}

Если Вы предпочитаете, чтобы некоторые ключи были первыми, чем можно использовать этот подход (я хочу type сначала и position второй):

    local $Data::Dumper::Sortkeys = sub {
            [   sort {
                            if    ( $b eq 'type' )     {1}
                            elsif ( $a eq 'type' )     {-1}
                            elsif ( $b eq 'position' ) {1}
                            elsif ( $a eq 'position' ) {-1}
                            else                       { $a cmp $b }
                            } keys %{ $_[0] }
            ];
    };
2
ответ дан 30 November 2019 в 23:48
поделиться
Другие вопросы по тегам:

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