ruby, personale, fun December 9, 2005 11:16 pm (Save post)
.. la verità è che mi sento uno straccio, e domattina mi devo svegliare presto, quindi mi son rifiutato din andare al concerto di una cover band dei pink floyd.
Colgo l’occasione per giocare un po’ con rhymes, perché sono io che l’ho aizzato a fare certe cose..
Ecco quindi, in tutta la loro gloria, l’ftp uploader ed il webserver in ruby.
Il codice per fare upload di un file in ftp è facilissimo:
require \"net/ftp\" Net::FTP.new(\"host\") do |ftp| ftp.login(\"user\", \"pass\") ftp.chdir(\"remotepath\") ftp.put(\"localfile\") end
sostanzialmente è identico a quello di lawrence, con una differenza chiave, l’uso del blocco. In ruby quando si lavora con una classe che rappresenta una risorsa da liberare (un file, un socket, una connessione al database etc) esiste questo idioma del passare un blocco al metodo di creazione della stessa.
Il metodo sarà implementato più o meno così:
def initialize(argomenti) acquisisci risorsa yield self if block_given? ensure libera risorsa end
ensure è equivalente a finally in py/java/etc.
Notate che quando si gestiscono eccezioni in un metodo è il corpo stesso del metodo che funziona da contenitore, e quindi non si deve specificare un ulteriore blocco interno (il try: in python).
Il significato dell’idioma è insomma il fatto che non c’è bisogno di gestire esplicitamente ogni volta la liberazione delle risorse o la gestione delle eccezioni, in quanto il metodo se ne occuperà al posto nostro se gli passiamo un blocco.
Siamo sinceri, è una cosa copiata dal Lisp, come al solito, ma d’altronde è un’idea talmente buona che in qualche modo la sta introducendo anche Guido.
Ma passiamo al webserver.
Credo che il modulo per costruire semplici server in ruby sia copiat^Wispirato a quello di python, e facendo un port linea per linea il codice risultante sarebbe troppo simile.
Ma ruby è TIMTOWTDI, quindi si può semplificare:
require \"webrick\" # default porta 80 srv = WEBrick::HTTPServer.new srv.mount_proc(\"/\") do |req, res| res.body = \"<html><body><h1>This is the HTML body</h1></body></html>\" end srv.start
notate che si usa un blocco pure qui.
I blocchi sono d’altronde un concetto talmente generico che risultano utili in ogni situazione


guarda qui: http://blogs.ugidotnet.org/lawrence/archive/2005/12/06/31231.aspx#31279
il commento di Daniele Alessandri
Comment by Lawrence Oluyede — December 9, 2005 @ 11:39 pm
ma quanti blog hai?
Comment by gabriele — December 10, 2005 @ 1:06 am
ahaha quello lo usavo millenni fa quanod usavo .NET
Comment by Lawrence Oluyede — December 10, 2005 @ 1:50 pm