Como explico en el blog menos pretencioso de la historia empiezo con nueva sección, que parte de la iniciativa de Jordan Fowler y del que iré tomando las ideas (a igual que con las novedades de Rails). Vamos allá.
Antes de nada, instalarnos Ruby es lo que toca, aunque también existe la opción interprete online para trastear un ratín. En fin, que si todo ha ido bien deberíamos tener disponible un maravilloso interprete (IRB) donde probar nuestras primeras sentencias Ruby.
$ irb
irb(main):001:0> puts "Hola mundo!"
Hola mundo!
=> nil
Si sois capaces de sacar por pantalla esto, ya no hay más historias. Acceder ya a la documentacion oficial RDoc Documentation for Core Classes será el pan de cada día, aunque a muchos de los que nos conozco les sale ulticaria cuando ven el sistema de ordenación que genera RDoc. Suelen optar por opciones más usables, como gotapi o noobkit. Por último, también podemos acceder a la documentación desde nuestra terminal:
$ ri Array
$ ri Array#select
Primera incursión…
Object.constants.select { |c| Object.const_get(c).is_a?(Class) }.sort
… que paso a explicar. La clase Object, como en otros lenguajes, es la clase raiz en Ruby de la que todo surge. Utilizando Object.constants obtenemos una Array con todas las clases, modulos, constante,… que cuelgan de dicha clase. Para poder obtener solo las clases deberemos obtener instancias de las cadenas que hemos obtenido; el metodo const_get nos ayudará con dicha tarea..
irb(main):001:0> Object.const_get("Array").new
=> []
Guay, no? Hemos podido crear un Array con la cadena “Array”. Siguiendo con la sentencia original, lo unico que nos queda es filtrar las constantes que son del tipo Class y asi obtener las 65 core classes de las que dispone la clase Object en Ruby.
=> [“ArgumentError”, “Array”, “Bignum”, “Binding”, “Class”, “ConditionVariable”, “Continuation”, “Data”, “Dir”, “EOFError”, “Exception”, “FalseClass”, “File”, “Fixnum”, “Float”, “FloatDomainError”, “Hash”, “IO”, “IOError”, “IndexError”, “Integer”, “Interrupt”, “LoadError”, “LocalJumpError”, “MatchData”, “MatchingData”, “Method”, “ModelProxy”, “Module”, “Mutex”, “NameError”, “NilClass”, “NoMemoryError”, “NoMethodError”, “NotImplementedError”, “Numeric”, “Object”, “Proc”, “Queue”, “Range”, “RangeError”, “Regexp”, “RegexpError”, “RubyLex”, “RuntimeError”, “SLex”, “ScriptError”, “SecurityError”, “SignalException”, “SizedQueue”, “StandardError”, “String”, “Struct”, “Symbol”, “SyntaxError”, “SystemCallError”, “SystemExit”, “SystemStackError”, “Thread”, “ThreadError”, “ThreadGroup”, “Time”, “TrueClass”, “TypeError”, “UnboundMethod”, “ZeroDivisionError”
Pronto más.