Установка для свойства «UNMutableNotificationContent.sound» требуемого звукового файла устраняет проблемы и воспроизводит требуемый файл.
Различные операторы в Perl контекстно-зависимы и приводят к различным результатам в списке и скалярном контексте.
Например:
my(@array) = (1, 2, 4, 8, 16);
my($first) = @array;
my(@copy1) = @array;
my @copy2 = @array;
my $count = @array;
print "array: @array\n";
print "first: $first\n";
print "copy1: @copy1\n";
print "copy2: @copy2\n";
print "count: $count\n";
Вывод:
array: 1 2 4 8 16
first: 1
copy1: 1 2 4 8 16
copy2: 1 2 4 8 16
count: 5
Теперь:
$first
содержит 1 (первый элемент массива), потому что круглые скобки в my($first)
обеспечьте контекст массива, но существует только пространство для одного значения в $first
.@copy1
и @copy2
содержите копию @array
,$count
содержит 5, потому что это - скалярный контекст, и @array
оценивает к числу элементов в массиве в скалярном контексте.Более тщательно продуманные примеры могли быть созданы также (результатами является осуществление для читателя):
my($item1, $item2, @rest) = @array;
my(@copy3, @copy4) = @array, @array;
Нет никакой прямой параллели для списка и скалярный контекст на других языках, о которых я знаю.
Скалярный контекст - то, что Вы получаете при поиске единственного значения. Контекст списка - то, что Вы получаете при поиске нескольких значений. Одно из наиболее распространенных мест для наблюдения различия при работе с массивами:
@x = @array; # copy an array
$x = @array; # get the number of elements in an array
Другие операторы и функции контекстно-зависимы также:
$x = 'abc' =~ /(\w+)/; # $x = 1
($x) = 'abc' =~ /(\w+)/; # $x = 'abc'
@x = localtime(); # (seconds, minutes, hours...)
$x = localtime(); # 'Thu Dec 18 10:02:17 2008'
То, как оператор (или функция) ведет себя в данном контексте, до оператора. Нет никаких общих правил для того, как вещи, как предполагается, ведут себя.
Можно сделать собственные подпрограммы контекстно-зависимыми при помощи wantarray
функция для определения контекста вызова. Можно вынудить выражение быть оцененным в скалярном контексте при помощи scalar
ключевое слово.
В дополнение к скаляру и контекстам списка Вы будете также видеть "пусто" (никакое ожидаемое возвращаемое значение) и "булевская переменная" (истинное/ложное ожидаемое значение) контексты, упомянутые в документации.
Это просто означает, что тип данных будет оценен на основе режима работы. Например, присвоение на скаляр означает, что правая сторона будет оценена как скаляр.
Я думаю лучшие средства о понимании, что контекст узнает о wantarray. Поэтому предположите, что = подпрограмма, которая реализует wantarray:
sub = {
return if ( ! defined wantarray ); # void: just return (doesn't make sense for =)
return @_ if ( wantarray ); # list: return the array
return $#_ + 1; # scalar: return the count of the @_
}
Примеры в этом сообщении работают, как будто вышеупомянутую подпрограмму называют путем передачи правой стороны как параметра.
Что касается параллелей на других языках, да, я все еще поддерживаю, что фактически каждый язык поддерживает что-то подобное. Полиморфизм подобен на всех языках OO. Другой пример, Java преобразовывает объекты Представить в виде строки в определенных контекстах. И каждый невведенный язык сценариев, который я использовал, имеет подобные понятия.