Jaka jest różnica w inicjowaniu przez Ruby nowego ciągu znaków za pomocą podwójnego cudzysłowu (""
) kontra String.new
? Dla celów ciekawość i eksperymentowanie, ja overrode String#initialize
:W jaki sposób Ruby ocenia podwójne cudzysłowy (inaczej "") w porównaniu do String.new?
class String
def initialize
puts "I <3 bananas" # they're delicious!
end
end
Co próbuję dowiedzieć się: dlaczego te dwa przykłady różnią?
# 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> ""
=> ""
Jest to irytujące, ponieważ każdy wynik badania Google wydaje się być skoncentrowane na podstawowej składni Ruby, i nie byłem w stanie znaleźć coś w dokumentacji Ruby.
Co stanie się, jeśli zamiast tego zastąpisz opcję "przydzielić"? –
@RyanBigg To dobra myśl, ale to nie ma znaczenia. Literały łańcuchowe są oceniane i mają swój obiekt utworzony podczas kompilacji, z pominięciem zarówno 'initialize' i' allocate'. –
@DarshanComputing, dzięki! Wygląda na to, że musiałbym włamać się i zrekompilować Ruby ze źródła, aby "" zwrócił rzeczy inicjujące. Przeczytam więcej o literałach. – amorphid