Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
Это - противная небольшая идиома для установки автосброса на дескрипторе файла кроме STDOUT.
select()
берет предоставленный дескриптор файла и (в основном) заменяет STDOUT им, и он возвращает старый дескриптор файла, когда он сделан.
Так (select($s),$|=1)
перенаправления дескриптор файла (помнят select
возвраты старый), и автосброс наборов ($| = 1
). Это делает это в списке ((...)[0]
) и возвращает первое значение (который является результатом эти select
вызов - исходный STDOUT), и затем передает что назад в другой select
для восстановления исходного дескриптора файла STDOUT. Уф.
, Но теперь Вы понимаете это (хорошо, возможно, ;)), сделайте это вместо этого:
use IO::Handle;
$fh->autoflush;
В другом месте проведения я когда-то предложил, чтобы более понятная версия была таким образом:
for ( select $fh ) { $| = 1; select $_ }
Это сохраняет единственное преимущество компактной идиомы, которым никакая переменная не должна быть объявленной в окружающем объеме.
Или если Вы не довольны $_
, можно записать это как это:
for my $prevfh ( select $fh ) { $| = 1; select $prevfh }
Объем $prevfh
ограничен for
блок. (Но если Вы пишете Perl, у Вас действительно нет оправдания быть своенравными о $_
.)
Способ выяснить любой код состоит в том, чтобы выбрать его независимо. Вы знаете, что материал в круглых скобках происходит перед материалом снаружи. Это - тот же способ, которым Вы были бы, выясняя то, что код делает на других языках.
первый бит затем:
( select(s), $|=1 )
, Что список имеет два элемента, которые являются результатами двух операций: один для выбора s
дескриптор файла как значение по умолчанию затем один для установки $|
на истинное значение. Эти $|
одна из переменных на дескриптор файла, которые только относятся к в настоящее время выбираемому дескриптору файла (см. , Понимают глобальные переменные в [1 110] Эффективный Perler). В конце у Вас есть список двух объектов: предыдущий дескриптор файла по умолчанию (результат select
), и 1.
следующая часть является литеральной частью списка для вытаскивания объекта в индексе 0:
( PREVIOUS_DEFAULT, 1 )[0]
результатом этого является единственный объект, который является предыдущим дескриптором файла по умолчанию.
следующая часть берет результат части и использует его в качестве аргумента другому вызову к select
select( PREVIOUS_DEFAULT );
Так, в действительности, Вы установили $|
на дескрипторе файла и закончили назад, где Вы запустили с дескриптора файла по умолчанию.
Это - чрезмерно умный код для включения буфера, сбрасывающего на дескрипторе s
и затем повторно выбирающего текущий дескриптор.
См. perldoc -f select
для больше.
Представляется, что контейнеры ключей не предназначены для этой цели (это подразумевается в документе «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.
проверьте perldoc -f select . Чтобы узнать значение $ |
, проверьте perldoc perlvar
Пропуск загрузки IO :: Handle - это чрезмерная оптимизация.
use IO::Handle;
$fh->autoflush(1);
гораздо читабельнее.