2010-03-20 21 views

Trả lời

11

Tôi không muốn quá nitpicky, nhưng nếu bạn muốn giống như Python ' Cách tiếp cận, thay vì làm "StackOverflow"[0..-2] bạn có thể làm "StackOverflow"[0...-1] cho cùng một kết quả.

Trong Ruby, một phạm vi có 3 dấu chấm không bao gồm đối số phù hợp, trong đó một dải có hai dấu chấm bao gồm nó. Vì vậy, trong trường hợp cắt chuỗi, ba dấu chấm gần hơn một chút so với cú pháp của Python.

+0

Bây giờ, điều đó đã khiến tôi đọc tài liệu cho Phạm vi một lần nữa và tìm hiểu về các dấu chấm ba lần đầu tiên. Tốt đẹp! – hermannloose

+0

Nắm tay của tôi với hai chấm so với ba dấu chấm là rất dễ nhầm lẫn/đếm số dấu chấm, tăng cơ hội lỗi hoặc thực hiện bảo trì một chút khó khăn hơn. Theo tôi, việc sử dụng ba là một sự tò mò hơn vì nó thực sự không giúp tôi viết mã rõ ràng hơn. –

+0

@ Z.E.D .: Một trong các trường hợp sử dụng cho các phạm vi 3 chấm đang chạy một câu lệnh trường hợp trên phao. Xem trang 97 của cuốn sách Pickaxe cho Ruby 1.9, nếu bạn có nó. –

2

"stackoverflow"[0..-2] sẽ trở lại "stackoverflo"

4

của Ruby hiện tại của bạn không làm những gì bạn mô tả: là cắt bỏ các ký tự cuối cùng, nhưng nó cũng đảo ngược chuỗi.

Tương đương gần đoạn Python sẽ

output = 'stackoverflow' 
puts output[0...-1] 

Ban đầu, bạn sử dụng .. thay vì ... (mà sẽ làm việc nếu bạn đã làm output[0..-2]); người trước đây bị đóng cửa - đóng cửa sau bị đóng cửa. Slices - và hầu hết mọi thứ khác - trong Python được đóng - mở.

+0

Bạn có thể chọn một phạm vi bao gồm kết thúc của nó. Hai dấu chấm ('0 ..- 2') bao gồm phần tử cuối cùng trong khi dạng ba chấm (' 0 ...- 1') loại trừ nó. – Chuck

+0

@Chuck, Cảm ơn. Tôi chỉ đang chỉnh sửa để nói vậy. :) –

1

Nếu tất cả các bạn muốn làm là loại bỏ các ký tự cuối cùng của chuỗi, bạn có thể sử dụng 'chặt' phương pháp cũng như:

puts output.chop 

hoặc

puts output.chop! 
+1

Lưu ý rằng 'chop' sẽ xóa hai ký tự nếu chuỗi kết thúc bằng' \ r \ n'. –

1

Nếu bạn chỉ muốn xóa ký tự cuối cùng, bạn cũng có thể làm

output.chop 
Các vấn đề liên quan