Hintergrund:
Ich habe ein Modul, das eine Reihe von Instanzmethoden deklariert
module UsefulThings
def get_file; ...
def delete_file; ...
def format_text(x); ...
end
Und ich möchte einige dieser Methoden innerhalb einer Klasse aufrufen. Wie Sie dies normalerweise in Rubin tun, ist wie folgt:
class UsefulWorker
include UsefulThings
def do_work
format_text("abc")
...
end
end
Problem
include UsefulThingsbringt alle Methoden aus UsefulThings. In diesem Fall will ich nur format_textund will explizit nicht get_fileund delete_file.
Ich kann mehrere mögliche Lösungen dafür sehen:
- Rufen Sie die Methode irgendwie direkt auf dem Modul auf, ohne sie irgendwo einzuschließen
- Ich weiß nicht, wie / ob das geht. (Daher diese Frage)
- Irgendwie einschließen
Usefulthingsund nur einige seiner Methoden einbringen- Ich weiß auch nicht, wie / ob das geht
- Erstellen Sie eine Proxy-Klasse, schließen Sie
UsefulThingsdiese ein und delegieren Sie sieformat_textan diese Proxy-Instanz- Dies würde funktionieren, aber anonyme Proxy-Klassen sind ein Hack. Yuck.
- Teilen Sie das Modul in 2 oder mehr kleinere Module auf
- Dies würde auch funktionieren und ist wahrscheinlich die beste Lösung, die ich mir vorstellen kann, aber ich würde es vorziehen, sie zu vermeiden, da sich am Ende Dutzende und Dutzende von Modulen ansammeln würden - dies zu verwalten wäre mühsam
Warum gibt es in einem Modul viele unabhängige Funktionen? Es stammt ApplicationHelperaus einer Rails-App, die unser Team de facto als Müllhalde für alles ausgewählt hat, was nicht spezifisch genug ist, um irgendwohin zu gehören. Meist eigenständige Dienstprogrammmethoden, die überall verwendet werden. Ich könnte es in separate Helfer aufteilen, aber es würden 30 von ihnen sein, alle mit jeweils einer Methode ... das scheint unproduktiv
module UT; def add1; self+1; end; def add2; self+2; end; endund möchten verwenden, add1aber nicht add2im Unterricht Fixnum. Wie würde es helfen, Modulfunktionen dafür zu haben? Vermisse ich etwas
Module#includedRückruf verwenden , um einenincludeder anderen auszulösen . Dieformat_textMethode könnte in ein eigenes Modul verschoben werden, da sie für sich genommen nützlich zu sein scheint. Dies würde das Management etwas weniger belasten.