Что пытается сделать эта строка кода? - PullRequest
0 голосов
/ 16 февраля 2012

Этот код Perl является частью объявления переменной в начале фрагмента кода. Что это значит?

my $EXPLICIT_YEAR = $ALL_PAGES ? 0 : ($store{year} || $current_year);

Ответы [ 5 ]

4 голосов
/ 16 февраля 2012

Это эквивалентно этому:

my $EXPLICIT_YEAR;
if ($ALL_PAGES) {
    $EXPLICIT_YEAR = 0;
}
else {
    # $EXPLICIT_YEAR = $store{year} || $current_year;
    if ($store{year}) {
        $EXPLICIT_YEAR = $store{year};
    }
    else {
        $EXPLICIT_YEAR = $current_year;
    }
}

Часть $conditional ? $true : $false является троичной, если. Часть $store{year} || $current_year использует тот факт, что || Оператор возвращает первое значение, которое оценивается как true, что позволяет использовать $ current_year, если $ store {year} имеет значение «false» (ноль, пустая строка и т. д.)

1 голос
/ 16 февраля 2012
my $EXPLICIT_YEAR = $ALL_PAGES ? 0 : ($store{year} || $current_year);

В этом выражении используется оператор Ternary "?:" в сочетании с подвыражением с использованием логического ИЛИ в стиле || C * . Смотрите perldoc perlop .

$ALL_PAGES ?

Выражение перед ? - условием - оценивается как логическое выражение. Истинное значение, означающее любое значение, которое не является нулем, пустой строкой или неопределенным (не объявлено).

0 : ( $store{year} || $current_year )

Значения по обе стороны от : являются значениями, которые должны быть возвращены, в зависимости от возвращаемого значения условия. Если условие оценивается как true, вернуть крайнее левое значение, в противном случае крайнее правое. Крайнее левое значение - просто ноль 0.

$store{year} || $current_year

Самым правым значением является само выражение, использующее логический оператор ИЛИ в стиле C. Он вернет крайнее левое значение, если оценивает значение true (и игнорирует крайнее правое значение). В противном случае он вернет самое правильное значение. Итак:

  • если $ ALL_PAGES имеет значение true, тогда установить $ EXPLICIT_YEAR на ноль
  • иначе, если $ ALL_PAGES равно false, тогда:
  • если $ store {year} равен true, тогда установить $ EXPLICIT_YEAR в $ store {year}
  • иначе установите $ EXPLICIT_YEAR на $ current_year
0 голосов
/ 16 февраля 2012

Я думаю, это способ сделать if / then / else, смотрите здесь: http://www.tutorialspoint.com/perl/perl_conditions.htm

0 голосов
/ 16 февраля 2012

Я знаю 0 Perl, но очень много C, поэтому предположим здесь:

  Set variable EXPLICIT_YEAR to  
     (  if ALL_PAGES == true then 0  
        else ( (get store indexed at year) or current_year ))

Операция or

false or false = false  
false or true  = true
true  or false = true  
true  or true  = true  
0 голосов
/ 16 февраля 2012

Я не разработчик Perl, но я на 99% уверен (это верно для большинства других языков), что это соответствует следующему: если переменная $ALL_PAGES истинна (или 1), то 0 оценивается а если нет, то ($store{year} || $current_year) оценивается.

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