Was bedeutet class << self
abmurksen Rubinrot ?
Antwort
Zu viele Anzeigen?Wenn Sie C-Erweiterungen für Ihre Ruby-Projekte schreiben, gibt es eigentlich nur eine Möglichkeit, eine Modulmethode zu definieren.
rb_define_singleton_method
Ich weiß, dass diese Selbstbeschäftigung alle möglichen anderen Fragen aufwirft, so dass es besser wäre, wenn Sie jeden Teil durchsuchen würden.
Zuerst die Objekte.
foo = Object.new
Kann ich eine Methode für foo entwickeln?
Sicher
def foo.hello
'hello'
end
Was soll ich damit machen?
foo.hello
==>"hello"
Nur ein weiteres Objekt.
foo.methods
Sie erhalten alle Objektmethoden plus Ihre neue Methode.
def foo.self
self
end
foo.self
Nur das foo-Objekt.
Versuchen Sie zu sehen, was passiert, wenn Sie foo aus anderen Objekten wie Class und Module machen. Die Beispiele aus den Antworten sind nett zum Spielen, aber man muss mit anderen Ideen oder Konzepten arbeiten, um wirklich zu verstehen, was mit der Art und Weise, wie der Code geschrieben ist, passiert. Jetzt haben Sie also viele Begriffe, die Sie sich ansehen können.
Singleton, Klasse, Modul, selbst, Objekt, und Eigenclass wurde angesprochen, aber Ruby benennt Objektmodelle nicht so. Es ist mehr wie Metaklasse. Richard oder __why zeigt Ihnen die Idee hier. http://viewsourcecode.org/why/hacking/seeingMetaclassesClearly.html Und wenn Sie das umhaut, dann versuchen Sie, Ruby Object Model in der Suche zu finden. Zwei Videos, die ich auf YouTube kenne, sind von Dave Thomas und Peter Cooper. Sie versuchen auch, dieses Konzept zu erklären. Dave hat lange gebraucht, um es zu verstehen, also mach dir keine Sorgen. Ich arbeite auch noch daran. Warum sollte ich sonst hier sein? Vielen Dank für deine Frage. Werfen Sie auch einen Blick auf die Standardbibliothek. Sie hat ein Singleton Modul, nur so zur Info.
Das ist ziemlich gut. https://www.youtube.com/watch?v=i4uiyWA8eFk
- See previous answers
- Weitere Antworten anzeigen
42 Stimmen
Es gibt einen sehr schönen Artikel über dieses Thema von Yehuda Katz: yehudakatz.com/2009/11/15/… und Yugui: yugui.jp/articles/846
4 Stimmen
Wieder ein superschöner Artikel hier: integralist.co.uk/posts/eigenclass.html
2 Stimmen
Ich sehe dies innerhalb eines Moduls, ist das ein Unterschied? github.com/ruby/rake/blob/master/lib/rake/rake_module.rb
0 Stimmen
@FullDecent Es macht keinen Unterschied, da alles in Ruby ein Objekt ist, einschließlich Module und Klassen.
1 Stimmen
Siehe github.com/defunkt/metaid/blob/master/metaid.rb Das passt zu "Metabrille klar sehen" viewsourcecode.org/why/hacking/seeingMetaclassesClearly.html
0 Stimmen
Die Dokumentation zu ruby-doc finden Sie unter aquí .