1005 Stimmen

Klasse << Selbst Idiom in Ruby

Was bedeutet class << self abmurksen Rubinrot ?

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

1voto

Douglas G. Allen Punkte 2085

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X