Supongamos que tengo un módulo con los métodos: función1, función2, función3. Quiero importar function1 y function2 pero no function3. ¿Hay alguna manera de hacer esto en ruby?¿Cómo puedo importar solo un par de funciones de un módulo de Ruby?
7
A
Respuesta
6
No estoy seguro si hay una manera limpia de simplemente agregar los métodos que desea, pero puede eliminar los métodos que no desee utilizando undef_method
.
module Foo
def function1
end
def function2
end
def function3
end
end
module MiniFoo
include Foo
not_wanted_methods = Foo.instance_methods - %w(function1 function2)
not_wanted_methods.each {|m| undef_method m}
end
class Whatever
include MiniFoo
end
5
Solución similar pero un poco más automática. Sin embargo, no tengo idea de qué tipo de cosas raras pueden pasar.
module Foo
def m1
puts "Hello from m1"
end
def m2
puts "Hllo from m2"
end
end
class Module
alias :__include__ :include
def include(mod, *methods)
if methods.size > 0
tmp = mod.dup
new_mod = Object.const_set("Mod#{tmp.object_id}", tmp)
toremove = new_mod.instance_methods.reject { |m| methods.include? m.to_sym }
toremove.each { |m| new_mod.send(:undef_method, m) }
__include__(new_mod)
else
__include__(mod)
end
end
end
class Bar
include Foo
end
class Baz
include Foo, :m2
end
bar = Bar.new
baz = Baz.new
p bar.methods - Object.methods
p baz.methods - Object.methods
=>
["m1", "m2"]
["m2"]
4
Suponiendo controlar el código fuente para el módulo, creo que la manera más limpia sería dividir el módulo en más de, uh, piezas modulares.
Si solo quiere algunas partes de un módulo, es una buena señal de que podría refaccionar ese módulo en múltiples módulos que tienen menos responsabilidad.
Cuestiones relacionadas
- 1. Cómo des-importar un módulo de Python?
- 2. En Erlang, ¿cómo puedo importar todas las funciones de un módulo?
- 3. Importar un módulo en Python solo si no existe
- 4. ¿Puedo desactivar la suplantación solo en un par de instancias?
- 5. dinámicamente importar módulo de Python
- 6. ¿Cómo importar un módulo como __main__?
- 7. ¿Cómo enumerar todas las funciones en un módulo de Python?
- 8. ¿Cómo burlarse de las funciones del Módulo Ruby?
- 9. PowerShell - Cómo importar-Módulo en un espacio de ejecución
- 10. ¿Puede un almacén de claves de Java importar un par de claves generado por OpenSSL?
- 11. ¿Puede Ruby importar un dll de .NET?
- 12. Sphinx: lista de funciones en un módulo
- 13. importación de múltiples funciones de un módulo de Python
- 14. Ruby: incluya un nombre de módulo dinámico
- 15. Boost Python: Problemas para importar un módulo
- 16. ¿Importar un módulo basado en la versión de python instalada?
- 17. ¿Cómo puedo evitar que un módulo de Python se importe solo?
- 18. __package__ es Ninguno al importar un módulo de Python
- 19. Haciendo que un módulo herede de otro módulo en Ruby
- 20. Importar módulo de la subcarpeta
- 21. ¿Cómo puedo almacenar un par de números en C++?
- 22. Importar archivo de texto como cadena de un solo carácter
- 23. Cómo importar un signo de exclamación (u otro operador) desde el módulo Haskell
- 24. Cómo importar un módulo en Python con importlib.import_module
- 25. Importar un módulo Python en una plantilla Jinja?
- 26. ¿Cómo puedo inicializar las variables de instancia de un módulo en Ruby? .
- 27. ¿Cómo puedo importar el módulo sqlite3 en Python 2.4?
- 28. Rieles: ¿Cómo escribo las pruebas para un módulo Ruby?
- 29. añadir dinámicamente las funciones de un módulo de Python
- 30. Par Haskell y funciones de desvinculación
Tenía en mente algo como esto, pero pensé que quizás existe una manera más limpia. – Geo