То, почему 'Использование “сдвига” без круглых скобок, является предупреждением ambiguou, выпущенным Perl?

Учитывая Ваши ограничения, Вы застреваете с поиском грубой силы (или создание индекса, если поиск будет повторен). Можно ли разработать кого-либо о том, как эти ArrayList сгенерирован - возможно, там существует некоторое пространство для маневра.

, Если все Вы ищете, более симпатичный код, рассмотрите использование Apache классы Наборов палаты общин, в особенности CollectionUtils.find () , для готового синтаксического сахара:

ArrayList haystack = // ...
final Object needleField1 = // ...
final Object needleField2 = // ...

Object found = CollectionUtils.find(haystack, new Predicate() {
   public boolean evaluate(Object input) {
      return needleField1.equals(input.field1) && 
             needleField2.equals(input.field2);
   }
});

12
задан brian d foy 20 October 2009 в 07:14
поделиться

2 ответа

С используйте диагностику , вы получите полезное сообщение:

    Warning: Use of "shift" without parentheses is ambiguous at (eval
        9)[/usr/lib/perl5/5.8/perl5db.pl:628] line 2 (#1)
    (S ambiguous) You wrote a unary operator followed by something that
    looks like a binary operator that could also have been interpreted as a
    term or unary operator.  For instance, if you know that the rand
    function has a default argument of 1.0, and you write

        rand + 5;

    you may THINK you wrote the same thing as

        rand() + 5;

    but in actual fact, you got

        rand(+5);

    So put in parentheses to say what you really mean.

Есть опасения, что вы могли бы написать что-то вроде shift .5 , и это будет анализируется как shift (0.5) .

27
ответ дан 2 December 2019 в 04:17
поделиться

Неоднозначный не означает действительно неоднозначный, просто неоднозначный, насколько определил синтаксический анализатор. сдвиг. в частности "неоднозначен", потому что . может начинать термин (например, .123 ) или оператор, поэтому он не знает достаточно, чтобы решить, является ли то, что следует ниже, операндом shift или оператором, для которого shift () является операндом (а синтаксический анализатор недостаточно умен, чтобы знать, что: a) . не является началом такого члена или б) .123 не является допустимым операндом для сдвига).

8
ответ дан 2 December 2019 в 04:17
поделиться
Другие вопросы по тегам:

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