Что действительно “выбирает ((выбор (выборы), $ | =1) [0])” делают в Perl?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
30
задан paxdiablo 30 October 2016 в 01:21
поделиться

7 ответов

Это - противная небольшая идиома для установки автосброса на дескрипторе файла кроме STDOUT.

select() берет предоставленный дескриптор файла и (в основном) заменяет STDOUT им, и он возвращает старый дескриптор файла, когда он сделан.

Так (select($s),$|=1) перенаправления дескриптор файла (помнят select возвраты старый), и автосброс наборов ($| = 1). Это делает это в списке ((...)[0]) и возвращает первое значение (который является результатом эти select вызов - исходный STDOUT), и затем передает что назад в другой select для восстановления исходного дескриптора файла STDOUT. Уф.

, Но теперь Вы понимаете это (хорошо, возможно, ;)), сделайте это вместо этого:

use IO::Handle;
$fh->autoflush;
63
ответ дан 27 November 2019 в 22:57
поделиться

В другом месте проведения я когда-то предложил, чтобы более понятная версия была таким образом:

for ( select $fh ) { $| = 1; select $_ }

Это сохраняет единственное преимущество компактной идиомы, которым никакая переменная не должна быть объявленной в окружающем объеме.

Или если Вы не довольны $_, можно записать это как это:

for my $prevfh ( select $fh ) { $| = 1; select $prevfh }

Объем $prevfh ограничен for блок. (Но если Вы пишете Perl, у Вас действительно нет оправдания быть своенравными о $_.)

10
ответ дан 27 November 2019 в 22:57
поделиться

Способ выяснить любой код состоит в том, чтобы выбрать его независимо. Вы знаете, что материал в круглых скобках происходит перед материалом снаружи. Это - тот же способ, которым Вы были бы, выясняя то, что код делает на других языках.

первый бит затем:

( select(s), $|=1 )

, Что список имеет два элемента, которые являются результатами двух операций: один для выбора s дескриптор файла как значение по умолчанию затем один для установки $| на истинное значение. Эти $| одна из переменных на дескриптор файла, которые только относятся к в настоящее время выбираемому дескриптору файла (см. , Понимают глобальные переменные в [1 110] Эффективный Perler). В конце у Вас есть список двух объектов: предыдущий дескриптор файла по умолчанию (результат select), и 1.

следующая часть является литеральной частью списка для вытаскивания объекта в индексе 0:

( PREVIOUS_DEFAULT, 1 )[0]

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

следующая часть берет результат части и использует его в качестве аргумента другому вызову к select

 select( PREVIOUS_DEFAULT );

Так, в действительности, Вы установили $| на дескрипторе файла и закончили назад, где Вы запустили с дескриптора файла по умолчанию.

29
ответ дан 27 November 2019 в 22:57
поделиться

Это - чрезмерно умный код для включения буфера, сбрасывающего на дескрипторе s и затем повторно выбирающего текущий дескриптор.

См. perldoc -f select для больше.

8
ответ дан 27 November 2019 в 22:57
поделиться

Представляется, что контейнеры ключей не предназначены для этой цели (это подразумевается в документе «How to: Store Asymmetric Keys in a Key Container» из руководства разработчика .NET Framework Developer's Guide, и подтверждается в разделе MSDN ).

Для достижения этой цели необходимо использовать другие механизмы, такие как сохранение ключа в XML-файле.

-121--3409484-

Я только что смотрел на JCrop, плагин JQuery, который выглядит отлично и прекрасно работает - на большинстве современных браузеров, поэтому проверьте, что ваша целевая платформа поддерживается.

Вы можете увидеть его в действии и загрузить скрипты отсюда

http://deepliquid.com/content/Jcrop.html

, и вам понадобится скрипт JQuery рамки, доступный от jquery.com

Это все бесплатно и Open Source, так что вы можете настроить его сколько угодно.

Роб

-121--1396375-
select($fh)

Выберите новый дескриптор файла по умолчанию. См. http://perldoc.perl.org/functions/select.html

(select($fh), $|=1)

Включение автоматической очистки. См. http://perldoc.perl.org/perlvar.html

(select($fh), $|=1)[0]

Возврат первого значения этого кортежа.

select((select($fh), $|=1)[0])

выберите , т.е. восстановите старый дескриптор файла по умолчанию.


Эквивалентно

$oldfh = select($fh);
$| = 1;
select($oldfh);

, что означает

use IO::Handle;
$fh->autoflush(1);

, как показано на странице perldoc.

20
ответ дан 27 November 2019 в 22:57
поделиться

проверьте perldoc -f select . Чтобы узнать значение $ | , проверьте perldoc perlvar

2
ответ дан 27 November 2019 в 22:57
поделиться

Пропуск загрузки IO :: Handle - это чрезмерная оптимизация.

use IO::Handle;
$fh->autoflush(1);

гораздо читабельнее.

2
ответ дан 27 November 2019 в 22:57
поделиться
Другие вопросы по тегам:

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