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ảPaulBrian
first_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ảPaulBrian
first_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án
first_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 khiname
thay đổi thìfirst_name
cũng thay đổi theo.+=
nó sẽ tạo ra một object mới, vì vậy khi thay đổiname
thìfirst_name
khô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 +=