2010-04-25 41 views
5

Tôi là người mới đối với Ruby, và đã làm việc theo cách của tôi thông qua Hướng dẫn Little Humble Little Ruby của ông Neighborly. Đã có một vài lỗi chính tả trong các ví dụ mã trên đường đi, nhưng tôi đã luôn luôn cố gắng tìm ra những gì sai và sau đó sửa chữa nó - cho đến bây giờ!Phương pháp xóa Ruby (thao tác chuỗi)

Đây thực sự là cơ bản, nhưng tôi không thể nhận được các ví dụ sau đây để làm việc trên Mac OS X (Snow Leopard):

gone = "Got gone fool!" 
puts "Original: " + gone 
gone.delete!("o", "r-v") 
puts "deleted: " + gone 

Output Tôi đang mong đợi là:

Original: Got gone fool! 
deleted: G gne fl! 

Kết quả tôi thực sự nhận được là:

Original: Got gone fool! 
deleted: Got gone fool! 

Xóa! phương pháp dường như không có bất kỳ ảnh hưởng nào.

Có ai có thể làm sáng tỏ những gì xảy ra ở đây không? : - \

Trả lời

9

Phương thức String.delete (Documented here) xử lý các đối số của nó dưới dạng mảng và sau đó xóa các ký tự dựa trên giao lộ của các mảng của nó.

Giao điểm của 2 mảng là tất cả các ký tự chung cho cả hai mảng. Vì vậy, ban đầu bạn xóa các gone.delete!("o", "r-v") sẽ trở thành

gone.delete ['o'] & ['r','s','t','u','v'] 

Không có nhân vật hiện diện trong cả hai mảng nên xóa sẽ nhận được một mảng trống rỗng, vì thế không có nhân vật sẽ bị xóa.

+0

Một lỗi đánh máy khác với các ví dụ trong cuốn sách. ;-) Cảm ơn rất nhiều vì đã giải thích. – Brian

1

Bạn nhận được cùng một o/p sử dụng một số cách khác nhau như gsub

puts "deleted: " + gone.gsub('o', '') 

o/p

deleted: Got gone fool! 
+0

Lạ, phải không? Bạn có đang sử dụng MAC OS X không? – Brian

2

tôi đã thay đổi

gone.delete!("o", "r-v") 

để

gone.delete!("or-v") 

và hoạt động tốt.

+0

Cảm ơn rất nhiều! Tôi đã thử tất cả mọi thứ nhưng điều đó! Ngoài quan tâm, bạn có đang sử dụng MAC OS X không? – Brian

+0

Không. Tôi sử dụng ruby ​​trên windows và linux. Hầu hết các ruby ​​nên là hệ điều hành bất khả tri và vì vậy bất kỳ vấn đề ban đầu bạn phải đối mặt không nên cụ thể cho OS X. –

+0

Cẩn thận về việc mở rộng khi sử dụng dấu ngoặc kép: http://stackoverflow.com/a/4190812/1729094 – yPhil

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