Вы должны знать, какие свойства должны быть слабыми, а какие сильными. Например, общепринятая практика объявляет, например, все IBOutlets как слабые, потому что они сохраняются представлением, исходящим из раскадровки, поэтому нет необходимости сохранять сильную ссылку в viewcontroller.
Другим примером может быть делегат, который всегда должен быть слабым, или он предотвратит освобождение делегата (главным образом другого viewcontroller), потому что держатель делегата еще жив.
В вашем случае str будет равен nil после init, потому что нет других ссылок на его содержимое. На самом деле вы должны получить предупреждение компилятора, если вы сделаете это.
Посмотрите на эту ветку с более подробным объяснением: Слабые и сильные атрибуты установщика свойств в Objective-C
use Data::Dumper;
local $Data::Dumper::Terse = 1;
my $str = Dumper({a => 1, b => 2, c => 3});
См. также 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}
Существует Data::Dumper
модуль, который один способ сделать этот вид преобразования.
Данные использования:: Дамп вместо Данных:: Самосвал. Это - в основном то же, кроме без того раздражения $VAR1 = ...
хлам:
use Data::Dump "pp";
print pp({a => 1, b => 2, c => 3});
Производит:
{ a => 1, b => 2, c => 3 }
Если Вы находитесь в Windows, Данных:: Дамп прибыл предварительно установленный с ActivePerl начиная с версии 5.8.
Еще одно решение для ласточки:
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] }
];
};