Tamam, Ruby'nin argümanlarını bir işleve nasıl geçirdiği konusunda kafam karıştı.Dizeyi yakut işlevine geçirme
def buble_sort(arr)
unordered = true
while unordered
unordered = false
for i in (1..arr.size-1)
if(arr[i-1] > arr[i])
arr[i-1], arr[i] = arr[i], arr[i-1]
unordered = true;
end
end
end
arr
end
varış değerini değiştirmemelidir Bu yöntemin çağrılması: Ben yakut değeri geçiyor belgelerde okumak, ama argümanlarının İşte tarafından ileten gibi benim durumumda görünüyor ettik problem Çünkü ruby değerden geçer. Ama benim durumumda, , özgün diziyi değiştiriyor. Niye ya? Kodu:
p "#{arr} before sort" # => "[85, -4, 1, 2, 55, 23, 0] before sort"
p buble_sort(arr) # => [-4, 0, 1, 2, 23, 55, 85]
p "#{arr} after sort" # => "[-4, 0, 1, 2, 23, 55, 85] after sort"
Başvuru bir değerdir. Aynı dizide çalıştığınız diziyi kopyalamıyorsanız. –
Olası kopyası [Yakut geçişi referansa mı yoksa değere mi göre mi?] (Http://stackoverflow.com/questions/1872110/is-ruby-pass-by-reference-or-by-value) – anquegi
Yinelenmesi gereken bir nesne veya yeni bir yapı inşa etmek, e. g. } def buble_sort (* arr) ' –