2015-02-05 19 views
12

Ich bin neu in Rubin und Schienen beide. Ich denke, Rails ist eine der besten API, und Ruby ist ziemlich einzigartig, es scheint, dass Ruby geschickt "Annahmen" machen kann, um Entwicklern zu helfen. Aber ich bin mir nicht sicher, in welchem ​​Ausmaß.

meine Fragen sind über Doppelpunkt in Variable.
Was ich bis jetzt verstanden habe ist, dass : Variable in Ruby, ist zu sagen, dass diese Variable nicht in der Lage sein wird, zu ändern, die Konstante in anderer Sprache ähnlich ist. Hab ich recht??Rubin auf Schienen, Doppelpunkt auf der Rückseite oder vor Variablen

Dann wird meine Verwirrung, manchmal sehe ich den Doppelpunkt infront Variable, wie diese

Rails.application.config.session_store :cookie_store, 
     key: '_blog_session' 
    <%= link_to "Delete", article, confirm: "Are you sure?", 
     method: :delete %> 

Beide Schlüssel: und Methode: Kolon in front.What hat nicht, dass dies bedeuten? und Des Weiteren

Blog::Application.routes.draw.do 
    root :to => "articles#index" 
end 

Es gibt zwei Doppelpunkte dazwischen Variablen? jetzt rate ich, dass Blog: ist eine Variable und: Die Anwendung ist konstant. was ich bezweifle, weil es keinen Sinn ergibt. Bitte erleuchte mich?

danke

+0

Dies ist weder eine Variable, noch eine Konstante. Es ist literale Syntax zu Ruby [Symbol] (http://www.ruby-doc.org/core-2.2.0/Symbol.html). Die Blog :: Application-Syntax bezieht sich nicht auf Symbole, sondern auf das Auflösen von [Namespaces] (http://ruby-doc.com/docs/ProgrammingRuby/html/tut_modules.html). –

+0

Nur um klar zu sein, meinst du, Blog ist ein Namespace? oder Anwendung ist ein Namespace? Was ist mit Doppelpunkt vor, wie Methode: oder Schlüssel: – vdj4y

+0

Blog ist Namespace. Sehen Sie sich den Link an, den ich zur Verfügung gestellt habe. Syntax wie '{method: 'delete'}' usw. ist eine Hash-Syntax, die äquivalent zu '{: method => 'delete'}' ist. –

Antwort

31

Was ich bis jetzt verstanden habe ist, dass :variable in Ruby, dass diese Variable nicht in der Lage sein wird zu ändern, die Konstante in anderen Sprache ähnlich ist.

Ich bin mir nicht sicher, ob ich diese Aussage verstehe.In RubyKonstanten mit einem Großbuchstaben beginnen:

Foo = 1 

Neuzuordnung gibt eine Warnung aus:

Foo = 1 
Foo = 2 #=> warning: already initialized constant Foo 

Variablen mit einem Kleinbuchstaben und Neuzuweisung nicht startet eine Warnung verursachen (sie sind soll sich ändern):

foo = 1 
foo = 2 # no warning 

Symbole mit einem Doppelpunkt beginnen:

:a_symbol 
:Uppercase_symbol 
:"i'm a symbol, too" 

Sie stellen oft statische Werte, z.B. :get und :post. Symbole sind speichereffizient, da sie nur einmal erstellt werden - das gleiche Symbolliteral gibt immer dasselbe Objekt zurück. Überprüfen, ob zwei Symbole gleich sind, ist eine billige Operation.

Sowohl key: als auch method: (...) Was bedeutet das?

Dies ist eine alternative Syntax für Hashes. Sie können es in IRB geben Sie das Ergebnis zu sehen:

{ foo: 1, bar: 2 } 
#=> {:foo=>1, :bar=>2} 

Es gibt zwei Doppelpunkte dazwischen Variablen? Jetzt vermute ich, dass Blog: eine Variable ist, und :Application ist konstant.

Nein, Blog und Application sind beide Konstanten und :: ist der Bereichsauflösungsoperator. Es kann verwendet werden, um auf verschachtelte Konstanten zuzugreifen, z. B .:

module Foo 
    class Bar 
    BAZ = 123 
    end 
end 

Foo::Bar::BAZ #=> 123 
+0

Großartig, kurz und klar. Danke – vdj4y

+0

@Stefan eine weitere Verwirrung 'params = {}' params [Mehtods:] =: Syntaxfehler löschen, unerwartet '] 'aber wenn params [: mehtods] =: löschen jetzt ist es in Ordnung, warum? – VKatz

+0

@VinayGupta die alternative Syntax funktioniert nur für Schlüssel-Wert * -Paare *, z. '{method:: delete}'. Ansonsten kommt der Doppelpunkt immer zuerst. – Stefan

3
Rails.application.config.session_store :cookie_store, key: '_blog_session' 

session_store ist eine Methode, die zwei "Argumente" nimmt:

  • :cookie_store ist ein Symbol
  • key: '_blog_session' ist eigentlich ein kurzer Weg des Schreibens eines Hash.

(auch session_store :cookie_store, { key: '_blog_session' } sein könnte)

Ähnlich für link_to "Delete", article, confirm: "Are you sure?", method: :delete

  • "Delete" ist ein String
  • article eine variable
  • { confirm: '...', method: :delete } hash wo confirm:, method: und :delete wieder Symbole.

Während Blog::Application:: is basically a namespace resolution operator. Eine Möglichkeit für Sie die Anwendungsklasse im Blog Modul zu adressieren.

Hoffe, das hilft. Sehen Sie sich die Dokumentation an, auf die ich Bezug genommen habe, sie ist ziemlich gut erklärt.

+0

'bestätigen:" Sind Sie sicher? ", Methode:: Löschen' ist * ein * Hash, nicht zwei – Stefan

+0

@Stefan du bist natürlich richtig. – wpp