30-12-2012, 04:07 PM
On peut effectivement rouvrir n'importe quelle classe. C'est effectivement à utiliser prudemment (c'est d'ailleurs l'objet d'une fonctionnalité de Ruby 2.0 : les refinements).
Les symboles sont effectivement des clés arbitraires de type singleton (un symbole
L'aspect implicite de Ruby et notamment le retour de la dernière expression d'un bloc (qu'on retrouve d'ailleurs en Scala ou en Erlang) est une force. Par exemple, les conditions retournent des valeurs.
Enfin, plein de choses qui permettent d'éviter d'écrire des tartines ou de surcharger d'instructions inutiles.
Les symboles sont effectivement des clés arbitraires de type singleton (un symbole
:foo
aura toujours la même identité qu'un autre symbole :foo
, alors que deux chaînes "foo"
et "foo"
ont des identités différentes.L'aspect implicite de Ruby et notamment le retour de la dernière expression d'un bloc (qu'on retrouve d'ailleurs en Scala ou en Erlang) est une force. Par exemple, les conditions retournent des valeurs.
class ApplicationController < ActionController::Base
def current_user
return nil unless cookies.signed[:persistence_token].present?
@current_user ||= begin
# Do something. It's only done when @current_user is falsy (eg. false or nil) so we won't call the database every time current_user is called.
User.find_by_persistence_token(cookies.signed[:persistence_token])
end
end
end
end_game_type = if world.destroyed?
:world_is_destroyed
elsif world.players.alive.one?
:only_one_survivor
end
Enfin, plein de choses qui permettent d'éviter d'écrire des tartines ou de surcharger d'instructions inutiles.