3 votes

Comment appeler une méthode à partir d'un module d'un autre fichier ruby ?

J'ai deux fichiers Ruby : l'un contient un module avec quelques méthodes de calcul statistique, dans l'autre fichier je veux appeler une des méthodes du module. Comment puis-je faire cela en Ruby ?

Est-ce la bonne façon de faire ?

require 'name of the file with the module'

a=[1,2,3,4]
a.method1

7voto

cydparser Points 1927

Require a besoin du chemin absolu vers le fichier, à moins que le fichier ne soit situé dans l'un des chemins de chargement de Ruby. Vous pouvez voir les chemins de chargement par défaut avec puts $: . Il est courant d'effectuer l'une des opérations suivantes pour charger un fichier :

Ajoutez le répertoire du fichier principal au chemin de chargement et utilisez ensuite les chemins relatifs avec require :

$: << File.dirname(__FILE__)
require "my_module"

Le code Ruby 1.8 qui ne charge qu'un seul fichier contiendra souvent une ligne unique du genre :

require File.expand_path("../my_module", __FILE__)

Ruby 1.9 a ajouté require_relative :

require_relative "my_module"

Dans le module, vous devrez définir les méthodes comme des méthodes de classe, ou utiliser la fonction Module#module_function :

module MyModule
  def self.method1 ary
    ...
  end

  def method2
    ...
  end
  module_function :method2
end

a = [1,2,3,4]
MyModule.method1(a)

2voto

Sony Santos Points 2628

Votre méthode est correcte si votre fichier de module se trouve dans le chemin de recherche de require.

Si votre module fournit des méthodes qui seront utilisées par l'objet lui-même, vous devez le faire :

require 'name of the file with the module'

a=[1,2,3,4]
a.extend MyModule   # here "a" can use the methods of MyModule
a.method1

Voir Objet#extend .

Sinon, si vous utilisez les méthodes directement par le module, vous utiliserez :

MyModule.method1(a)

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