hiệu suất 'nhìn lại'


10

Tôi có một số mã sử dụng (looking-back … (line-beginning-position)). Tài liệu của các looking-backtiểu bang rằng tốt hơn hết là tránh chức năng này vì sự chậm chạp. Tôi tò mò sẽ làm theo cách tiếp cận nhanh hơn?

(save-excursion
  (goto-char (line-beginning-position))
  (looking-at regexp stuff))

Nó sẽ nhanh hơn. Nhưng đây không phải là một mã tương đương.
abo-abo

@ abo-abo, vâng, không phải vậy. Nhưng trong trường hợp của tôi, tôi tin rằng tôi có thể giới thiệu looking-atphiên bản dễ dàng. Cảm ơn bạn.
Geradlus_RU

2
Vấn đề hiệu suất lớn nhất của việc nhìn lại là khi nó không có giới hạn (hoặc giới hạn ở xa). Nếu bạn xem xét (with-temp-buffer (insert (make-string 10000 ?x)) (looking-back "y"))Bạn sẽ thấy nó rất nhanh. Bây giờ thay đổi regrec thành ".*y"thay thế: nó chậm đến mức không thể chịu được mặc dù người đọc rõ ràng rằng điều này không bao giờ có thể sánh được.
YoungFrog

Câu trả lời:


9

Chắc chắn rồi. Bạn sẽ đặc biệt đạt được nếu bạn chỉ muốn kiểm tra char-beforehoặc tìm kiếm ngược cho một chuỗi chữ. Và nếu bạn phải sử dụng looking-backthì hãy thử sử dụng một LIMITđối số, nếu có thể.

Xem lỗi Emacs # 17284 để biết ví dụ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.