Ruby Integer (), Array (), et al - o que são eles? De onde eles vêm?

Eu me deparei com conversões do formulário Array (valor), String (valor) e Integer (valor) na ocasião. Parece-me que são apenas açúcar sintático para uma chamada aos métodos value.to_a, value.to_s ou value.to_i correspondentes.

Então estou me perguntando:

Onde / como são estes definidos? Eu não consigo encontrá-los no objeto, módulo, classe, etcExistem alguns cenários comuns para os quais é preferível usá-los em vez do método correspondente / subjacente to_X?

Poderiam estes ser usados ​​em coerção de tipo genérico? Isto é, posso fazer algo nos moldes do

[Integer, String, Array].each {|klass| klass.do_generic_coercion(foo) }

? (... e não, eu realmente não quero fazer isso; conheço o tipo que quero, mas estou tentando evitar a declaração do caso).

questionAnswers(4)

yourAnswerToTheQuestion