возможно небольшая ошибка в Android Renderscript источник - PullRequest
0 голосов
/ 12 февраля 2011

просто просматривает источник для рендеринга . Я думаю, что я заметил ошибку, в строке 36

private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;

Подумайте, это должно быть двойным ==, но вам не хватает опыта кодирования, чтобы быть уверенным.

Ответы [ 2 ]

7 голосов
/ 12 февраля 2011

Нет, я не думаю, что это ошибка. Он устанавливает LOG_ENABLED на LOGD или LOGV в зависимости от значения DEBUG.

Соответствующий бит:

public class RenderScript {
    static final String LOG_TAG = "libRS_jni";
    private static final boolean DEBUG  = false;
    @SuppressWarnings({"UnusedDeclaration", "deprecation"})
    private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;

и последняя строка концептуально эквивалентна:

    private static final boolean LOG_ENABLED;
    if (DEBUG)
        LOG_ENABLED = Config.LOGD;
    else
        LOG_ENABLED = Config.LOGV;

На самом деле

private static final boolean LOG_ENABLED == DEBUG ? Config.LOGD : Config.LOGV;

на самом деле не имеет смысла, поскольку означает:

private static final boolean ((LOG_ENABLED == DEBUG)
                               ? Config.LOGD
                               : Config.LOGV);

, у которого вообще нет объявленного имени переменной, только значение, которое должно быть присвоено чему-либо.

1 голос
/ 12 февраля 2011

Это просто небольшая путаница в том, как троичные операторы работают в Java.Вы делаете что-то вроде:

int i;
boolean b;
int n1=2;
int n2=3;

i = b ? n1 : n2;

, где b может быть выражением, имеющим значение true или false.Раньше я использовал круглые скобки вокруг первого элемента, чтобы прояснить это, хотя я только просмотрел часть своего кода и, похоже, сейчас перестал это делать!

...