To dokładnie zachowanie, że można oczekiwać, aby zobaczyć.
Nigdy nie dodajesz niczego do Hash
, dlatego Hash
jest całkowicie pusty. Podczas wyszukiwania klucza klucz ten nigdy nie istnieje, dlatego zwraca wartość domyślną, którą określono jako Array
.
Sprawdzasz klucz 'a'
, który nie istnieje, a tym samym zwraca wartość Array
, którą podałeś jako wartość domyślną. Następnie należy wywołać <<
na tym Array
, który dodaje do niego wartość (1
).
Następnie należy wyszukać klucz 'b'
, który również nie istnieje, a następnie zwraca podaną wartość domyślną, która zawiera teraz dodany wcześniej element 1
. Następnie wywołujesz <<
na tym Array
, dołączając do niego wartość 2
.
Kończysz z Hash
, który jest wciąż pusty, ponieważ nigdy nie dodałeś do niego niczego. Domyślna wartość Hash
jest teraz tablicą zawierającą wartości 1
i 2
.
Dane wyjściowe, które widzisz, są takie, że IRb zawsze drukuje wynik ostatniego wyrażenia, które zostało ocenione. Ostatnie wyrażenie w twoim przykładzie wywołuje <<
na Array
. <<
zwraca jego odbiornik, który następnie jest wartością zwracaną całego wyrażenia, a tym samym, co drukuje IRb.
Nie masz pewności, jakie dane wyjściowe widzisz? Albo co właściwie zawiera Hash? Nie jest jasne, czego tu szukasz. – jmccarthy