Le 19 juin 2008 17:18, Tony Chauveau a écrit :

>> ary = options[:fields].sort_by { |_, v| v['pos'] }.map(&:first)
>> requested_attributes = ary.in_groups_of(2)
>>
>> devrait obtenir ce que tu veux.
>
> Merci beaucoup, c'est exactement celà. A quoi correspond ce "_" dans le
> block de sort_by ?

Ben c'est un paramètre de bloc :)

Il y a plusieurs conventions de rubyistes :

- la première c'est d'appeler ses arguments k et v car on est fainéant
d'écrire key et value qui seraient plus explicites.

- la seconde est d'utiliser _ pour un argument ou une variable
dont on ne se servira pas. C'est une manière de dire : je m'en
tape le caribou de la variable _. On peut très bien l'utiliser,
mais dans ce cas on aurait pris un nom de variable plus parlant,
à moins de faire de l'obfuscated Ruby. Ici, je n'ai besoin que de
v.

Mais si une variable est inutile, ça ne sert à rien de lui donner
un nom (moins anonyme que _ car _ est en fait aussi un nom),
car nommer est difficile. Je sais pas si c'est clair ?

Plusieurs remarques annexes :

- on peut très bien avoir une variable d'instance @_ :

class Escargot
  attr_reader :_

  def initialize(message)
    @_ = message
  end
end

puts Escargot.new('@_ ressemble a un escargot, non ?')._

- Autre convention parfois utilisée, les méthodes commençant
par _ sont des méthodes privées.

- Tu as Object#__id__ et Object#__send__ qui sont des méthodes
un peu particulières. (Heureusement on abuse moins que Python
des méthodes commençant par __ (__getattr__, __init__, __delitem__,
__hash__ ...))

- Rails utilise certaines variables d'instance pour AC::B et AV::B
@_session, @_response, @_params, etc. via le mécanisme attr_internal.

- $_ est particulier.


   --  underflow_

-- 
http://twitter.com/underflow_

--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse [EMAIL PROTECTED]
-~----------~----~----~----~------~----~------~--~---

Répondre à