2009-04-20 15 views
5

Cho phép thay thế như /(foo|foobar|foobaz)/ thì Perl 6 có đưa ra bất kỳ lời hứa nào về việc cái nào trong ba thứ sẽ được sử dụng trước hay không và liệu nó có thực hiện lời hứa đó ở đâu trong tài liệu không?Liệu Perl 6 có đưa ra bất kỳ lời hứa nào về việc thay đổi thứ tự sẽ được sử dụng không?

Xem câu hỏi liên quan Does Perl currently (5.8 and 5.10) make any promises about the order alternations will be used?.

+3

Nó làm tôi ngạc nhiên khi Perl 6 thực hiện nhiều hứa hẹn. Cho đến khi Larry cho chúng ta một ngày phát hành thực tế, tôi sẽ không tin bất kỳ ai trong số họ :-) – bedwyr

+0

Heh, tốt, các quy tắc dường như được thực hiện chủ yếu và tôi không mong đợi bất kỳ thay đổi nào cho họ vào thời điểm này. Điều đó nói rằng, nếu nó thay đổi thì câu trả lời ở đây cũng có thể thay đổi. –

Trả lời

10

S05 nói

Cuối cùng, mỗi regex trong Perl 6 là cần thiết để có thể phân biệt được "tinh khiết" của mô hình từ hành động của mình, và trở lại danh sách các mẫu thẻ ban đầu (transitively bao gồm cả thẻ các mẫu của bất kỳ phần tử con nào được gọi là phần "thuần túy" của regex đó, nhưng không bao gồm bất kỳ phần tử con nào nhiều hơn một lần, vì nó sẽ liên quan đến tham chiếu tự, không được phép trong các biểu thức thông thường). Một luân phiên hợp lý sử dụng | sau đó lấy hai hoặc nhiều danh sách này và gửi đến danh sách thay thế khớp với tiền tố mã thông báo dài nhất. Điều này có thể hoặc có thể không phải là sự thay thế đầu tiên từ từ.

Tuy nhiên, nếu hai lựa chọn thay thế khớp với cùng độ dài, tie được chia trước bằng độ đặc hiệu. Phương án thay thế bắt đầu bằng chuỗi thắng cố định dài nhất; nghĩa là, số đối sánh chính xác càng gần với kết hợp được thực hiện bằng cách sử dụng các lớp ký tự. Nếu điều đó không hiệu quả, thì cà vạt sẽ bị hỏng theo một trong hai phương pháp. Nếu các lựa chọn thay thế trong các ngữ pháp khác nhau, MRO tiêu chuẩn (thứ tự độ phân giải phương pháp) xác định cái nào cần thử trước. Nếu các lựa chọn thay thế nằm trong cùng một tệp ngữ pháp, thay thế văn bản trước đó sẽ được ưu tiên. (Nếu quy tắc của ngữ pháp được quy định tại nhiều hơn một tập tin, thứ tự là undefined, và một sự khẳng định rõ ràng phải được sử dụng để buộc thất bại nếu một sai là cố gắng đầu tiên.)

này có vẻ là rất khác nhau lời hứa từ một được thực hiện trong Perl 5.

13

Để đặt nó chỉ một vài từ: các lựa chọn thay thế phải được đối sánh (ít nhất là không hợp lý) song song, và trận đấu dài nhất sẽ thắng. Nếu bạn muốn thay đổi tuần tự, bạn có thể sử dụng thanh đôi ||, hứa hẹn một thứ tự từ trái sang phải giống như | trong Perl 5 regexes.

Các vấn đề liên quan