2009-06-09 23 views
16

Pracuję przez Head First Rails i wciąż widzę =>. Jest w trasach:Ruby on Rails: co oznacza symbol =>?

map.connect '/marmots/new', controller=>'marmots', :action=>'new'

To w świadczeniu podszablonów:

render :partial=>"new_marmot"

Jest w opcji za linki:

<%= link_to 'Destroy', marmot, :confirm=>'Are you sure?', :method=>:delete %>

Zasadniczo => wydaje się oznaczać " równa się, "ale jeśli tak, dlaczego nie po prostu użyć równego s znak? Czy to raczej "wyślij do?"

Jak wymawiasz => i co rozumiesz? Mogę przejść przez to nie wiedząc, ale to mnie budzi.

+1

Widząc to pytanie 3 lata później rozśmiesza mnie! Jestem pewien, że widziałem już wcześniej nagłówki Ruby, ale może nie widziałem przykładów poza Railsami, w których pominięto oba nawiasy wywołania metody i nawiasy klamrowe wokół końcowego argumentu hash, więc wyglądało to jak magia. –

Odpowiedz

8

Twoje pierwsze wywołanie funkcji jest skrótem dla

map.connect('/marmots/new', {:controller=>'marmots', :action=>'new'}) 

gdzie {} są Hash-dosłowne. Drugim argumentem metody connect mapy obiektów jest obiekt klasy Hash z dwoma kluczami: controller i: action (oba są literałami klasy Symbol), których odpowiednimi wartościami są "świstaki" dwóch ciągów i "nowe".

EDYCJA: Nazywam to "strzałką" lub "mapami do".

+0

Czy można bezpiecznie powiedzieć, że za każdym razem, gdy widzę strzałkę, faktycznie tworzę hasz, nawet jeśli {} zostanie pominięte? –

+0

Tak dla parametrów w wywołaniach metod, nie w ogóle (w przypadku wyjątku z ratowaniem używany jest również operator "=>"). –

18

Słyszałem to powszechnie określane jako "rakieta hash". Jest to operator przypisania użyty z hasłami w rubinie. Więc jeśli masz hash i chcesz przypisać wartość do klucza (zwykle dosłownym), użyj

{key1 => value1, key2 => value2} 

szynach i inny kod Ruby, często przechodzą mieszań jako parametry do metod, aby osiągnąć ten sam efekt, jak nazwie argumenty w innych językach, takich jak Python.

object.method({:param1 => value1, :param2 => value2}) 

EDYCJA: Podczas czytania, używam "dostaje" jako czasownika, np. param1 dostaje value1, itp.

+0

Podobał mi się bit o nazwanych argumentach. dziękuję za jasną odpowiedź –