29 votes

Où dans le langage Ruby est défini% q,% w, etc.?

Une grande partie du langage Ruby est des méthodes plutôt que de la syntaxe, donc je m'attendais à trouver %q , %w , etc., définis comme des méthodes dans la classe Kernel . Cependant, ils ne sont pas là.

Alors, où sont-ils définis? S'agit-il de mots clés linguistiques?

30voto

the Tin Man Points 69148

Programmation Ruby mentionne dans le chapitre sur les chaînes.

Liés à l' %q{} et %Q{} est %{} qui est le même que %Q{}. Aussi, les délimiteurs "{}" je montre peut être une paire de délimiteurs, de sorte que vous pouvez utiliser [], (), etc. %q{} est la même que l'utilisation des guillemets simples pour délimiter une chaîne de caractères. %Q{} est le même que l'utilisation de guillemets, permettant à des chaînes incorporées à être interpolée:

%q{foobar} # => "foobar"
%Q{foobar} # => "foobar"

asdf = 'bar' # => "bar"
%q{foo#{asdf}} # => "foo\#{asdf}"
%Q{foo#{asdf}} # => "foobar"

Il y a aussi, %w{} qui divise une chaîne en utilisant les espaces, dans un tableau. Par exemple:

%w[a b c] # => ["a", "b", "c"]

%w{} ne pas interpoler intégré des variables:

%w[a b asdf] # => ["a", "b", "asdf"]
%w[a b #{asdf}] # => ["a", "b", "\#{asdf}"]

Et %r{} qui définit une expression régulière:

%r{^foo}.class # => Regexp

Enfin, il y a %x{} qui agit comme backticks, c'est à dire "`", en passant la chaîne du sous-jacent système d'exploitation. Il pense que "exec":

%x{date} # => "Fri Nov 26 15:08:44 MST 2010\n"

Beaucoup de Ruby sont des idées pour ces raccourcis sont de Perl, seulement en Perl ils utilisent q{}, qq{}, qw{}, qx{} et qr{}. Le premier q est synonyme de "citation", et ils sont traités et documentés comme "citant" des opérateurs si je me souviens bien. Ruby documentation doit être élargie, et cet ensemble d'outils peut certainement utiliser un peu d'aide.

24voto

Chris Johnsen Points 50064

Ils sont "codés en dur" dans l'analyseur; voir

Le moyen le plus facile pour trouver le code en question est de regarder pour la deuxième occurrence de l' str_sword (Single-Mots cités). Tous les "délimité d'entrée" de la syntaxe y est défini: %Q, %q, %W, %w, %x, %r, et %s (les deux versions référencées ci-dessus définissent le même ensemble délimité entrée marqueurs).

4voto

Daniel Vandersluis Points 30498

Ce ne sont pas des mots clés, ce sont des macros. Il est difficile de trouver une référence officielle pour eux, mais il y en a une ici .

1voto

Nathan Points 11

[Cette note est une réponse à la discussion entre la Volonté et de l'Étain L'homme, le 30 Mai 2012 sur le thème de la regexp littéraux de la recherche comme "%r.../" dans le Ruby docs. Je ne semble pas être en mesure d'ajouter un commentaire directement à cette discussion, mais peut-être quelqu'un avec appropriée privs pouvez déplacer cette info là dessus....]

Le général Ruby de documentation de classe est générée à partir d' RDoc commentaires intégré dans le code source pour chaque classe en question. Les commentaires ont syntaxe correcte de l'expression régulière littéraux, comme on peut le voir quand on regarde le texte de la documentation illustré par ri Regexp, en utilisant généré localement version HTML de la documentation, etc.

Toutefois, pendant une période de temps de ce printemps, la version de RDoc utilisé pour générer les pages de documentation sur www.ruby-doc.org contenait un bug qui a causé l' regexp littéraux à apparaître comme "%r.../" au lieu de "/.../". À compter du 9 juin, cependant, que le bug a été corrigé et le "core" et "std-lib" pages ont été régénérés, de sorte que la regexp littéraux sont affichés correctement de nouveau sur ce site.

(Il existe d'autres catégories de la documentation sur le site qui sont générés séparément, mais si l'une de ces pages montrent encore le format incorrect, ils devraient également se fixe lorsqu'ils sont finalement reconstruit.)

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