2008-12-01 7 views

Antwort

8

:: Base ist eine Klasse im Modul Active. Eines der Dinge, die Module tun, ist Namespacing in Ruby bereitzustellen. In Ruby erben Sie nicht von einem Modul, aber Sie können es mit der Include-Anweisung mischen.

Darf ich vorschlagen, das Buch Pickaxe abzuholen oder zu lesen.

+0

Mike, danke, ich muss wirklich die Spitzhacke aufheben, Wortspiel beabsichtigt ;-) – Valentin

+0

Gern geschehen. Viel Glück! –

6

in Ruby, :: greift auf statische Klasse oder Modul Konstanten. ActiveRecord::Base zeigt an, dass die ActiveRecord Klasse oder das Modul eine statische innere Klasse namens Base hat, die Sie erweitern.

Edit: als Mike weist darauf hin, in diesem Fall ActiveRecord ist ein Modul ...

+0

Active als Modul in Rails definiert ist, http://github.com/rails/rails/tree/master/activerecord/lib/active_record/base.rb –

4

:: ist ein unärer Operator, mit dem Sie auf eine Konstante, ein Modul oder eine Klasse zugreifen können, die in einer anderen Klasse oder einem anderen Modul definiert sind. Es wird verwendet, um Namespaces bereitzustellen, sodass Methoden- und Klassennamen nicht von anderen Autoren mit anderen Klassen in Konflikt stehen.

Wenn Sie Active siehe :: Base in Rails bedeutet dies, dass in Rails ActiveRecord::Base so etwas wie diese

ist
module ActiveRecord 
    class Base 
    end 
end 

Das bedeutet, dass eine Klasse genannt Base in einem ModulActiveRecord ist, die dann referenziert wie ActiveRecord::Base

Zum besseren Verständnis von :: Operator, gehen Sie einfach durch dieses Beispiel von tutorialspoint.com:

MR_COUNT = 0  # constant defined on main Object class 
module Foo 
    MR_COUNT = 0 
    ::MR_COUNT = 1 # set global count to 1 
    MR_COUNT = 2  # set local count to 2 
end 
puts MR_COUNT  # this is the global constant 
puts Foo::MR_COUNT # this is the local "Foo" constant 
Verwandte Themen