2013-05-23 39 views
17

Có phương pháp nào trong Ruby thực hiện đối diện String#succ không?Điều ngược lại với string.next là gì?

Nếu bạn chạy succ hoặc next bạn có được điều này:

a = "4.4.10" 
a.succ 
=> "4.4.11" 

Tôi muốn điều ngược lại:

a = "4.4.10" 
a.previous 
=> "4.4.09" 

Đây có phải là có thể? Tôi đã gặp khó khăn trong việc tìm kiếm điều này trong tài liệu của Ruby. Có lẽ nó không tồn tại?

+0

Tôi cũng không biết. Nhưng nó không phải là quá khó để thực hiện của riêng bạn. –

+0

Tôi đã tìm ra trường hợp đó. Có bất kỳ đề xuất tốt về một cách tiếp cận để viết nó? –

+1

Chia nhỏ trên các chấm, chọn đoạn cuối cùng, đúc thành int, giảm, ghép chuỗi lại. Nó, giống như, 3 dòng mã :) –

Trả lời

32

prev hoặc nội dung nào đó tương tự không có trong API chuẩn vì succ và giả thuyết prev là tính từ. Mặc dù vậy, "Implement Ruby String Class Prev/Pred/Prev!/Pred! - Opposite Of Next/Succ Methods" là phiên bản có thể bạn có thể sử dụng.

Vấn đề gốc là succ không thể đảo ngược. Điều này có nghĩa là, khi bạn áp dụng succ, thì prev sẽ kết thúc với một số sự mơ hồ.

surjective map of succ and prev

+4

Tuyệt vời! Cảm ơn nhiều. Tôi sẽ phải cung cấp cho nó một shot và xem nó hoạt động như thế nào! –

+0

Tôi đã chỉ tự hỏi về điều này, và đây là một lời giải thích tuyệt vời về lý do tại sao .prev sẽ rất khó thực hiện hoặc dự đoán nếu nó là một phương pháp thực tế. – Shem

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