Ruby - Diferencia entre Array # << y Array # push

Desde el examen de la documentación de Ruby 1.9.3, tanto Array # << como Array # push fueron diseñados para implementarse agregando un elemento al final de la matriz actual. Sin embargo, parece haber diferencias sutiles entre los dos.

El que encontré es que el operador * se puede usar para agregar el contenido de otra matriz a la actual, pero solo con #push.

a = [1,2,3]
b = [4,5,6]

a.push *b
=> [1,2,3,4,5,6]

Intentar usar # << en cambio da varios errores, dependiendo de si se usa con el operador de punto y / o paréntesis.

¿Por qué # << no funciona de la misma manera que #push? ¿Uno no es realmente un alias para el otro?