2010-01-16 50 views

Trả lời

25

Trong Ruby, dây là có thể thay đổi. Nghĩa là, một giá trị chuỗi thực sự có thể được thay đổi, không chỉ thay thế bằng một đối tượng khác. x << y sẽ thực sự thêm chuỗi y vào x, trong khi x + y sẽ tạo một Chuỗi mới và trả về chuỗi đó.

Điều này có thể được kiểm tra đơn giản trong thông dịch viên ruby:

irb(main):001:0> x = "hello" 
=> "hello" 
irb(main):002:0> x << "there" 
=> "hellothere" 
irb(main):003:0> x 
=> "hellothere" 
irb(main):004:0> x + "there" 
=> "hellotherethere" 
irb(main):005:0> x 
=> "hellothere" 

Đáng chú ý, thấy rằng x + "there" trả lại "hellotherethere" nhưng giá trị của x không thay đổi. Hãy cẩn thận với các chuỗi có thể thay đổi, chúng có thể đến và cắn bạn. Hầu hết các ngôn ngữ được quản lý khác không có chuỗi có thể thay đổi. Lưu ý rằng nhiều phương thức trên String có cả hai phiên bản phá hoại và không phá hủy: x.upcase sẽ trả về một chuỗi mới chứa phiên bản chữ hoa chữ thường của x, trong khi để lại x một mình; x.upcase! sẽ trả về giá trị trên cùng - và - sửa đổi đối tượng được trỏ đến bởi x.

+1

Giải thích tuyệt vời. x = "Nhiều"; x << "cảm ơn!" –

+4

BTW: Điều này cũng áp dụng cho hầu hết các đối tượng sưu tập khác trong Ruby. 'Array # <<' được thêm vào bằng cách thay đổi, 'Array # +' được thêm vào bằng cách tạo một mảng mới. 'Set # <<' là thêm một phần tử vào tập hợp, 'Set # +' được thiết lập union. Và cứ thế. –

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