Если регулярное выражение Ruby совпадает с чем-то, что не является строкой, для этого объекта вызывается метод to_str
, чтобы получить фактическую строку для сравнения. Я хочу избежать этого поведения; Я хотел бы сопоставлять регулярные выражения с объектами, которые не являются строками, но логически могут рассматриваться как произвольно доступные последовательности байтов, и все обращения к ним осуществляются с помощью метода byte_at()
(по духу сходного с Java * 1003) * метод).
Например, предположим, я хочу найти смещение байта в произвольном файле произвольного регулярного выражения; выражение может быть многострочным, поэтому я не могу просто читать строку за раз и искать совпадения в каждой строке. Если файл очень большой, я не могу поместить все это в память, поэтому я не могу просто прочитать его как одну большую строку. Однако было бы достаточно просто определить метод, который получает n-й байт файла (с буферизацией и кэшированием, которые необходимы для скорости).
В конце концов, я бы хотел создать полнофункциональный класс веревка , как в Ruby Quiz # 137 , и я хотел бы иметь возможность использовать регулярные выражения для них без потери производительности преобразования их в строки.
Я не хочу встать на ноги во внутренностях реализации регулярных выражений Ruby, поэтому любая оценка будет принята.