417 votes

Ce qui est Ruby ' s double deux-points ( :) agit-il ?

Qu'est-ce que ce double-virgule :: ? E. g. Foo::Bar.

J'ai trouvé une définition:

L' :: est un opérateur unaire qui permet de: constantes, les méthodes d'instance et les méthodes de la classe définie au sein d'une classe ou d'un module, accessible à partir de n'importe où en dehors de la classe ou du module.

mais cela conduit à plus de questions. Quelle bonne portée (private, protected) si vous pouvez simplement utiliser :: d'exposer quoi que ce soit?

368voto

mipadi Points 135410

``est fondamentalement un opérateur de résolution d’espace de noms. Il vous permet d’accéder aux éléments dans les modules ou les éléments de niveau classe dans les classes. Par exemple, que vous aviez cette configuration :

Vous pouvez accéder à de hors du module en tant que .

Il n’affecte pas les méthodes privées définies sur une classe, puisque vous accédez à ceux qui ont une syntaxe différente (le point `` ).

110voto

Nader Points 2325

Cet exemple simple montre comment il :

Tiré de http://www.tutorialspoint.com/ruby/ruby_operators.htm

70voto

mikej Points 30224

:: Vous permet d'accéder à une constante, un module ou une classe définie à l'intérieur d'une autre classe ou d'un module. Il est utilisé pour fournir des espaces de noms, de sorte que la méthode et les noms de classe n'entrent pas en conflit avec d'autres classes par les différents auteurs.

Quand vous voyez ActiveRecord::Base dans les Rails, il signifie que les Rails a quelque chose comme

module ActiveRecord
  class Base
  end
end

c'est à dire une classe appelée Base à l'intérieur d'un module ActiveRecord qui est ensuite référencé en tant que ActiveRecord::Base (vous pouvez en trouver dans les Rails de la source dans activerecord-n.n.n/lib/active_record/base.rb)

Une utilisation commune de :: est l'accès à des constantes définies dans les modules par exemple

module Math
  PI = 3.141 # ...
end

puts Math::PI

L' :: opérateur ne vous permet pas de contourner la visibilité des méthodes marqué privés ou protégés.

24voto

yfeldblum Points 42613
<blockquote> <p>A quoi bon est portée (privées, protégées) si vous pouvez simplement utiliser :: d’exposer n’importe quoi ?</p> </blockquote> <p>En Ruby, tout est exposé, et tout peut être modifié de n’importe où ailleurs.</p> <p>Si vous êtes inquiet au sujet du fait que les classes peuvent être changés de l’extérieur la « définition de la classe », alors que Ruby n’est probablement pas pour vous.</p> <p>En revanche, si vous êtes frustré par les classes de Java étant verrouillés, puis Ruby est sans doute ce que vous recherchez.</p>

11voto

Francisco Soto Points 5043

Non, il n'est pas d'avoir accès à la méthode, c'est une "résolution" de l'opérateur, qui est, vous l'utilisez pour régler la portée (ou de l'emplacement, vous pouvez le dire) d'une constante statique/symbole.

Par exemple, dans le premier de votre ligne, Rails de l'utiliser pour trouver la classe de Base à l'intérieur de la ActiveRecord.Module, dans votre second il est utilisé pour localiser la méthode de classe (statique) des Itinéraires de classe, etc, etc.

Il n'est pas utilisé pour exposer quoi que ce soit, il est utilisé pour "localiser" les choses autour de votre étendues.

http://en.wikipedia.org/wiki/Scope_resolution_operator

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