class Person
include Voice
include Beep
end
module Voice
def speak
puts 'speaking from module'
end
def original_speak
# ???
end
end
module Beep
def speak
puts 'beep beep'
end
end
Wie anrufen? Voice#speak
? Zum Beispiel:Wie wird eine Instanzmethode aufgerufen, die in einem Modul definiert ist, das von einem anderen Modul in Ruby überschrieben wird?
Ich möchte diesen Code zum Voice-Modul hinzufügen, nicht die Klasse Person oder das Beep-Modul.
Anwendungsfall:
Ein Modul, das weich löschen ist:
module Undeletable
def delete
# mark document as deleted. This creates a deletion document.
end
def restore
# Delete (for real) the deletion.
end
def obliterate
restore # because we don't want orphaned deletions.
real_delete # This should call Mongoid#delete
end
end
def Foo
include Mongoid::Document
include Undeletable
end
So im Allgemeinen, wenn wir foo.delete nennen, möchten wir weichen löschen. In seltenen Fällen möchten wir jedoch ein echtes Löschen durchführen. Das Modul sollte beide Methoden unterstützen.
Wenn es nicht leicht gemacht werden kann, dann könnte es falsch sein, es zu tun. Was ist dein Anwendungsfall? –
Was ist los? Sie haben die Frage geändert und beide Antworten unsinnig gemacht. Ich schlage vor, du rollst zurück. Deine ursprüngliche Frage war gut, interessant. (Downvote nicht meins.) –
Haha, ich dachte, jemand würde fragen. Ihre Antwort wurde gelöscht und ich habe die Antwort von Pascal bereits implementiert. Die Antwort hat bei mir nicht funktioniert, weil die Frage anders war. –