foreach my $ var (@list) - $ var это ссылка?

Почему вы не можете использовать классы CSS по умолчанию и добавить свой стиль?

.slick-next {
  /*my style*/
  background: url(my-image.png);
}

и

.slick-prev {
  /*my style*/
  background: url(my-image.png);
}

Использовали ли вы простое background css свойство?

в примере: http://jsfiddle.net/BNvke/1/

Вы также можете использовать Font Awesome . Не забывайте о псевдоэлементах CSS.

И не забывайте jQuery, вы можете заменить элементы, добавить классы и т. Д.

8
задан Sinan Ünür 18 June 2009 в 04:24
поделиться

5 ответов

$ var присваивается каждому элементу по очереди.

См. http://perldoc.perl.org/perlsyn.html#Foreach-Loops

Если какой-либо элемент LIST является lvalue, вы можете изменить его, изменив VAR внутри цикла. И наоборот, если какой-либо элемент LIST НЕ является lvalue, любая попытка изменить этот элемент не удастся. Другими словами, индексная переменная цикла foreach является неявным псевдонимом для каждого элемент в списке, который вы перебираете.

10
ответ дан 3 November 2019 в 14:38
поделиться

Единственное различие между этими циклами:

foreach (@array) { ... }
foreach my $var (@array) { ... }

- это переменная цикла. Наложение имен является функцией foreach , а не неявной переменной $ _ . Обратите внимание, что это псевдоним (другое имя для того же объекта), а не ссылка (указатель на объект).

В простом (и общем) случае, вы можете сломать алиасинг, сделав копию:

foreach my $var (@array) {
    my $copy = $var;
    # do something that changes $copy
}

Это работает для обычных скалярных значений. Для ссылок (или объектов) вам нужно будет сделать глубокую копию, используя Storable или Clone , что может быть дорогостоящим. Связанные переменные тоже проблематичны, perlsyn рекомендует полностью избегать такой ситуации.

2
ответ дан 3 November 2019 в 14:38
поделиться

Самый простой способ - просто скопировать it:

foreach my $var1 (@list) {
    my $var1_scratch = $var1;

или

foreach my $var1 ( map $_, @list ) {

Но если $ var1 является ссылкой, $ var1_scratch будет ссылкой на то же самое. Чтобы быть в безопасности, вам нужно использовать что-то вроде Storable :: dclone для создания глубокой копии:

foreach my $var1 ( @{ Storable::dclone( \@list ) } ) {
}

(непроверено). Тогда вы сможете безопасно изменить $ var1. Но это может быть дорого, если @list - это большая структура данных.

9
ответ дан 3 November 2019 в 14:38
поделиться

Я не знаю, как заставить переменную быть по значению, а не по ссылке в самом выражении foreach. Однако вы можете скопировать значение $ _ .

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

use Data::Dumper;

my @data = (1, 2, 3, 4);

print "Before:\n", Dumper(\@data), "\n\n\n";

foreach (@data) {
    my $v = $_;
    $v++;
}

print "After:\n", Dumper(\@data), "\n\n\n";

__END__
1
ответ дан 3 November 2019 в 14:38
поделиться

Это это псевдоним, а не ссылка. Если вы хотите создать свои собственные псевдонимы (вне for), вы можете использовать Data :: Alias ​​.

4
ответ дан 3 November 2019 в 14:38
поделиться
Другие вопросы по тегам:

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