Mam rad Python, ale Ruby vypada take docela pekne. Zajimala by me jedna vec: Je mozne v Ruby nejak zjistovat informace o existujicich tridach, modulech, metodach apod?
Priklad v Pythonu:
>>> import string
>>> dir(string)
*** Vypise funkce, atributy a tridy modulu string
>>> string.lower.__doc__
*** Vypise informace o funkci lower z modulu string
>>> s = "aaa"
>>> dir(s)
*** Vypise atributy a metody
Nejdříve odpověď na otázku: ano, je to možné. Např.:
a='retezec'
puts a.respond_to? :reverse
puts a.respond_to? :abs
Vypíše:
true
false
Pomocí a.methods bychom vypsali všechny metody objektu.
Abych tady nepsal další článek, dodám jen, že v Ruby je "reflexe" (je pro reflection nějaký ustálený český výraz?) podporována opravdu důkladně. V několikrát zmiňované on-line knize je o ní celá kapitola.
Dále bych rád poznamenal, že článek byl zamýšlen, jako rychlé seznámení s Ruby a cílem bylo navnadit čtenáře k dalšímu studiu (budou ještě dva díly). Objektovým modelem v Ruby jako samotným se v něm proto příliš nezabývám, abych zbytečně nemátl čtenáře, kteří objektově neprogramují.
Pokud však bude zájem, dopíšu ještě pokračování o objektech.
Napis vsechno! ;-))
(A ted vazne: Napis vsechno, kdyz uz jsou jini Ruby nadsenci literarne impotentni, ci lini)
PS: Myslim si, ze objekty jsou pro vetsinu zacatecniku snazsi k pochopeni nez neobjektove programovani (Objekt = Vec;
zeryk = Pes.new("Zeryk")
zeryk.stekej => "Haf haf"
se mi zda pro zacatecnika jednodussi nez "stekati zerykem" - stekej(zeryk)
)
Jiste, ze!
s = "String"
s.methods => vrati pole ve kterem jsou nazvy metod
(a protoze to je pole, muzes nan zavolat metodu sort a ono se setridi; tedy s.methods.sort je setridene pole nazvu metod)
no jo, ale Ruby je plne objektovy; tedy se muzes optat jake metody ma strida 'String': String.methods
instancni promenne: s.instance_variables
Dalsi hracky najdes jiste sam, nebo je (dozajista) najdes v dalsim clanku...