[RAILS] [Ruby / namespace] Approfondissez ":: ← this" que vous voyez souvent dans Ruby

Aperçu

J'apprends actuellement le langage de programmation Ruby et son framework Web Ruby on Rails. Il y a des symboles que vous voyez souvent dedans.

:: ← Ça y est.

Du point de vue d'un débutant, ce symbole je pensais seulement "Ne regardez pas de près les noms de classe". Bien sûr, cela a du sens.

Cet article vous donnera un aperçu.


:: ← Qu'est-ce que c'est?

Au fait, "::" que j'ai utilisé sans prêter une attention particulière ← C'est ça. Pour le comprendre, il faut connaître le concept d'`` espace de noms ''.

Qu'est-ce qu'un espace de noms?

Alors, qu'est-ce qu'un espace de noms? En termes simples, c'est la plage de gestion des méthodes et des variables ''. Même avec le même parler '', les mots sont différents aux États-Unis et au Japon, et même avec le même `` Taro '', un ensemble et deux ensembles de Taro sont des personnes différentes.

De cette façon, l'espace de noms est un mécanisme qui spécifie «à quoi appartiennent les méthodes et les variables?» Pour que les conflits dus au même nom ne se produisent pas.

Comme vous l'avez compris, ○○ :: △△ '' signifie ○○ appartenant à △△ ''.

Device :: ResistrationsController peut être lu comme `` ResistrationsController '' appartenant à Devise.

De plus, les espaces de noms sont divisés par "classe" ou "module". Je n'entrerai pas dans les détails ici, mais il existe les différences suivantes entre les classes et les modules:

Concernant les points soulignés par @scivola J'ai fait quelques corrections ci-dessous.


Signification de :: / Exemple spécifique

Jusqu'à présent, nous avons trouvé que :: '' signifie appeler B appartenant à '' en utilisant `` A :: B ''.

En regardant de plus près, `` :: '' a deux implications:

1.Appel de constantes appartenant à un module de classe
2.Appel d'une méthode qui appartient à un module de classe

Regardons chaque exemple.


1. Reportez-vous à la constante PI du module Math

Appelons la constante PI appartenant au module Math, qui est une bibliothèque intégrée de Ruby, et sortons le rapport de circonférence. (Référence: Ruby Reference | module Math )

call_pi.rb


puts Math::PI

Exécutez ce programme.

terminal


% ruby call_pi.rb
3.141592653589793

J'ai pu sortir le `` rapport de circonférence π ''.

Utilisez ceci pour référencer une constante.

En aparté, je vais essayer une autre forme d'appel pour des exemples ultérieurs. Essayez de l'appeler avec ". (Dot)" comme pour appeler une méthode.

call_pi.rb


puts Math.PI

Lorsque vous exécutez ce programme ...

terminal


% ruby call_pi.rb
Traceback (most recent call last):
math.rb:1:in `<main>': undefined method `PI' for Math:Module (NoMethodError)

L'erreur est `` La méthode appelée PI n'est pas définie dans le module Math ''. Puisque PI est une constante (valeur) et non une méthode, il est possible qu'une telle erreur se produise.


2. Reportez-vous à la méthode "run" de la classe animale (auto-fabriquée)

Ensuite, regardons un exemple de "référence de méthode".

Dans cet exemple, pour voir les avantages d'avoir un espace de noms, écrivons d'abord sans espace de noms.

run.rb


def run
  puts 'Courir sur 4 jambes'
end

def run
  puts 'Courir sur deux jambes'
end

run
run

Lançons ce programme.

terminal


% ruby run.rb
Courir sur deux jambes
Courir sur deux jambes

Si vous réutilisez le même nom de méthode `` run '', la méthode définie ultérieurement sera référencée.

Définissons ces run '' en les séparant avec la classe Dog '' `` Human ''.

run.rb


class Dog
  def self.run
    puts 'Courir sur 4 jambes'
  end
end

class Human
  def self.run
    puts 'Courir sur deux jambes'
  end
end

Dog::run
Human::run

Lançons ce programme.

terminal


% ruby run.rb
Courir sur 4 jambes
Courir sur deux jambes

Une méthode le long de l'espace de noms a été référencée. En effet, en définissant une classe et en utilisant :: '', il est maintenant possible de spécifier un récepteur et de l'appeler, comme Refer to Dog's run ''.

Par ailleurs, dans le cas de cette utilisation de :: (appel de méthode), il peut être remplacé par ". (Dot)". Plus précisément, c'est comme suit.

run.rb


(réduction)
Dog.run
Human.run

terminal


% ruby run.rb
Courir sur 4 jambes
Courir sur deux jambes

Il s'avère qu'il se comporte de la même manière qu'un appel de méthode de classe.

Et si vous utilisez :: comme "appel de méthode", vous pouvez spécifier plus qu'une classe ou un module pour le récepteur.

Par exemple, comme ça.

sample.rb


10::times { |i| puts i }

terminal


% ruby sample.rb
0
1
2
3
4
5
6
7
8
9

Ce qui précède est comment utiliser `` :: '' et ce que cela signifie.


Sommaire

Bien que Rails soit utile, je trouve cela étonnamment douloureux lorsque je tente de le personnaliser moi-même. Et la plupart des causes sont `` Je ne connais pas les bases de Ruby ''.

Il est important de rattraper son retard dans un court laps de temps, mais il est également important de s'asseoir et de comprendre les bases. J'essaierai de garder l'équilibre tout en apprenant.


référence

Recommended Posts

[Ruby / namespace] Approfondissez ":: ← this" que vous voyez souvent dans Ruby
Site recommandé pour les erreurs que vous voyez souvent
Journaux d'erreurs et gestion des exceptions qui sont souvent vus dans la zone Java
Méthodes Ruby souvent utilisées dans Rails
L'histoire de la rencontre d'un débordement arithmétique qui ne devrait pas être rencontré dans Ruby
Méthodes que j'ai trouvées utiles dans Ruby
[Rubiy] Et si vous mettez chaque déclaration dans chaque déclaration? ??