gdy piszę następujący kod:rubin tablica Najdziwniejsze (nieskończony array)
x= [1,2,3]
x << x
puts x
puts x[3]
puts x[3][3][3][3][3][3][3][3][3][3]
uzyskać ten wynik:
[1, 2, 3, [...]]
[1, 2, 3, [...]]
[1, 2, 3, [...]]
nie powinienem dostać tylko [1,2,3, [1,2,3]] i jakie będzie wyjaśnienie?
W Rubim 1.9, 'Array # <=>', '#eql?' I '# hash' również zajmują się rekursją, tak samo dla' Hash' i 'Struct' ... Nie wiesz, dlaczego uważasz to "niezwykłe"! http://blog.marc-andre.ca/2009/05/lost-in-recursion.html –
Nie uważam, że "nieskończenie rekursywna matryca samo-odwołująca się" jest typowym przypadkiem użycia, który normalny programista powinien rozważyć:) Napisałem swój udział w implementacjach 'to_s', ale nigdy nie uważałem specjalnej obudowy dla * tego *. Jeśli ktoś prosi o reprezentację ciągów nieskończonej struktury danych, otrzyma nieskończoną pętlę. Kropka. Mam na myśli, że 'map' dla nieskończonego' Enumerator' zwraca nieskończenie dużą tablicę i nikt nie myśli o tym dwa razy, czy to nie jest tak samo? –
Myślę, że to miłe, że Ruby radzi sobie z ładnymi strukturami rekursywnymi. Nie jestem pewien, czy są tak niezwykłe, np. struktury, które trzymają swojego rodzica i dzieci. Gdyby tak nie było, to przeliczanie byłoby wszystkim, co potrzebne do obsługi pamięci :-) –