Sự khác biệt trong cách Ruby khởi tạo một chuỗi mới với dấu ngoặc kép (""
) so với String.new
? Đối với mục đích tò mò và thử nghiệm, tôi gạt String#initialize
:Ruby đánh giá các dấu ngoặc kép (hay còn gọi là "") so với String.new như thế nào?
class String
def initialize
puts "I <3 bananas" # they're delicious!
end
end
Những gì tôi đang cố gắng tìm ra là: tại sao là hai ví dụ này khác nhau?
# Calling the String class directly, I can declare banana love!
irb(main):054:0> String.new
I <3 bananas
=> ""
# Using double quotes, this string is not as tasty :(
irb(main):055:0> ""
=> ""
Điều này gây khó chịu cho nghiên cứu vì mọi kết quả của Google dường như tập trung vào cú pháp cơ bản của Ruby và tôi không thể tìm thấy bất kỳ điều gì trong tài liệu Ruby.
Điều gì sẽ xảy ra nếu bạn ghi đè 'phân bổ' thay thế? –
@RyanBigg Đó là một suy nghĩ tốt, nhưng nó không tạo ra sự khác biệt. Các chuỗi ký tự được đánh giá và tạo đối tượng của chúng tại thời gian biên dịch, bỏ qua cả 'initialize' và' allocate'. –
@DarshanComputing, cảm ơn! Có vẻ như tôi phải hack và biên dịch lại Ruby từ nguồn để làm cho "" trả lại công cụ khởi tạo. Tôi sẽ đọc thêm về chữ. – amorphid