| lập trình ruby |
Nối chuỗi với
+=
first_name = "Paul"
name = first_name
last_name = "Brian"
name += last_name
Bây giờ mình kiểm tra:Nối chuỗi với
name==> nó trả về kết quảPaulBrianfirst_name==> nó trả về kết quảPaul
<<
first_name = "Paul"
name = first_name
last_name = "Brian"
name << last_name
Bây giờ mình kiểm tra:Vì sao lại có kết quả như vậy?
name==> nó trả về kết quảPaulBrianfirst_name==> nó trả về kết quảPaulBrian
Chúng ta sẽ kiểm tra **object_id* của name, first_name:*
Phép gánfirst_name = "Paul" name = first_name name.object_id --> 70148644941380 first_name.object_id --> 70148644941380
name = first_name lúc này name & first_name có cùng 1 object_id và khi thực hiện:Đánh giá
<<nó sẽ xử lý trực tiếp trên object của nó, vì vậy khinamethay đổi thìfirst_namecũng thay đổi theo.+=nó sẽ tạo ra một object mới, vì vậy khi thay đổinamethìfirst_namekhông bị ảnh hưởng.
Mình sẽ sử dụng
benchmark để xem thời gian thực hiện của 2 cách làm này
require 'benchmark`
n = 10000
Benchmark.bm do |benchmark|
benchmark.report("+=") do
n.times do
first_name = "Paul"
name = first_name
last_name = "Brian"
name += last_name
end
end
benchmark.report("<<") do
n.times do
first_name = "Paul"
name = first_name
last_name = "Brian"
name << last_name
end
end
end
Kết quả:Qua đó mình thấy được tốc độ xử lý của
user system total real += 0.010000 0.000000 0.010000 ( 0.007283) << 0.000000 0.000000 0.000000 ( 0.004042)
<< sẽ hiệu quả hơn +=