2 votes

Est-il possible d'avoir un argument de mot-clé nommé `class` ou un autre nom réservé en Ruby ?

De nombreux helpers de balises Rails (par exemple, content_tag, etc.) utilisent un paramètre d'option de hachage nommé class pour spécifier une classe HTML.

content_tag(:div, content_tag(:p, "Bonjour tout le monde!"), class: "strong")

Pour du nouveau code, j'aimerais utiliser des arguments de mots-clés, mais est-ce possible quand l'un d'eux est un mot-clé de langage ?

Par exemple, pour un hypothétique link_tag.

def link_tag(url, class: nil)
  html = ''
  html << '

7voto

Chris Heald Points 28814

En quelque sorte. Vous devez éviter de perturber le lexer de Ruby en évitant le mot-clé littéral dans votre code. En Ruby 2.2+, vous pouvez contourner cela avec binding.local_variable_get:

def link_tag(url, class: nil)
  format('', url, binding.local_variable_get(:class))
end

link_tag("http://stackoverflow.com", class: "fancy")
# => ""

Ce n'est pas vraiment une manière très propre de faire les choses, cependant, et risque de causer de la confusion. Je changerais simplement le nom de mes arguments pour éviter les conflits avec le langage si j'utilisais des arguments de mots-clés, (c'est-à-dire css_class ou le conventionnel klass, etc).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X