Аналог протокола дескриптора Python на других языках?

matches(); не буферизует, а find() - буферы. find() сначала выполняет поиск в конце строки, индексирует результат и возвращает логическое значение и соответствующий индекс.

Вот почему, когда у вас есть такой код, как

1:Pattern.compile("[a-z]");

2:Pattern.matcher("0a1b1c3d4");

3:int count = 0;

4:while(matcher.find()){

5:count++: }

В 4: механизм регулярных выражений с использованием структуры шаблонов будет читать весь ваш код (индекс для индексации, как указано regex[single character], чтобы найти хотя бы одно совпадение. Если такое совпадение найдено, оно будет проиндексировано, тогда цикл будет выполняться на основе индексированного результата else, если он не выполнил вычисления, как matches(); Оператор while никогда не будет выполняться, так как первый символ совпадающей строки не является алфавитом.

10
задан cdleary 29 August 2008 в 09:24
поделиться

2 ответа

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

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

4
ответ дан 4 December 2019 в 04:02
поделиться

Ruby и C# оба легко позволяют Вам создать средства доступа путем определения метода считывания/методов установщика для атрибута, во многом как в Python. Однако это не разработано, чтобы естественно позволить Вам написать код для этих методов в другом классе способ, которым позволяет Python. На практике я не уверен, насколько это имеет значение, с тех пор каждый раз, когда я видел, атрибут, определенный через дескриптор, протоколирует свой, реализованный в том же классе.

Править: Чините мою дислексию (которым я имею в виду небрежное чтение). По некоторым причинам я всегда читал "дескриптор" как "декоратор" и наоборот, даже когда я - тот, вводящий их обоих. Я покину свой пост, неповрежденный, так как он имеет допустимую информацию, хотя информация, которая абсолютно не имеет никакого отношения к вопросу.

Термин сам "декоратор" является на самом деле названием шаблона разработки, описанного в известной книге "Шаблонов разработки". Статья Wikipedia содержит много примеров на различных языках программирования использования декоратора: http://en.wikipedia.org/wiki/Decorator_pattern

Однако декораторы в той объектно-ориентированной статье; у них есть классы, реализовывая предопределенный интерфейс, который позволяет другому существующему классу вести себя по-другому так или иначе, и т.д. декораторы Python действуют функциональным способом, заменяя функцию во времени выполнения с другой функцией, позволяя Вам эффективно изменить/заменить ту функцию, ввести код, и т.д.

Это известно в мире Java как Аспектно-ориентированное программирование, и компилятор AspectJ Java позволяет Вам сделать эти виды вещей и скомпилировать Ваш код AspectJ (который является надмножеством Java) в байт-код Java.

Я не достаточно знаком с C# или Ruby для знания, какова их версия декораторов была бы.

0
ответ дан 4 December 2019 в 04:02
поделиться
Другие вопросы по тегам:

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