В моем проекте у меня есть абстрактный класс верхнего уровня FrameProducer
. Я добавил регистратор slf4j на этом уровне, чтобы он уже был у каждого наследующего класса. Вот код:
public abstract class FrameProducer extends Observable {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
protected BufferedImage frame;
public BufferedImage getFrame() {
return frame;
}
public void fireEvent() {
logger.debug("Firing event. Implementing class: {}", this.getClass());
setChanged();
notifyObservers();
}
}
Есть также два наследующих класса: CameraFrameGrabber
и GrayscaleFilter
. Тем не менее, когда метод fireEvent ()
вызывается из CameraFrameGrabber
или GrayscaleFilter
, сообщение регистрируется на уровне FrameProducer
. Вот журнал, для наглядности:
I '...
При оценке выражения в скалярном (логическом) контексте Perl использует явное значение 1
в качестве результата, если выражение оценивается как истина, и пустую строку, если выражение оценивается как ложный.
Мне любопытно, почему Perl использует пустую строку для представления логического ложного значения, а не 0
, что кажется более интуитивным.
Обратите внимание, что меня не волнует, что Perl обрабатывает пустую строку как ложную в скаляре. (логический) контекст.
РЕДАКТИРОВАТЬ
Каким образом использование строки, которая является истинной (например, «false»
) в качестве строкового представления ложных значений, изменит смысл существующего кода? Можно ли сказать, что код, изменяющий семантику после такого изменения, менее надежен / корректен, чем мог бы быть? Я предполагаю, что контекст строки настолько распространен в Perl, что единственный вариант, ведущий к разумной семантике, - это если логическое значение сохранит свое значение после циклического перехода к строке и от нее ...