2013-11-26 33 views
5

Czytam "Rails 3 Way" i na stronie 39, pokazuje próbkę kodu metody przekierowania :to =>. W tej metodzie istnieje następujący kod. Chociaż wiem, co modulo robi z liczbami, nie jestem pewien, co% robi poniżej, ponieważ zarówno ścieżka, jak i parametry nie są liczbami. Jeśli ktokolwiek może mi pomóc zrozumieć użycie% w tej sytuacji, byłbym wdzięczny.Co robi% w poniższym kodzie?

proc { |params| path % params } 

Odpowiedz

10

To prawdopodobnie metoda String#% który działa trochę jak sprintf robi w innych językach:

'%05d' % 10 
# => "00010" 

Można wziąć albo jeden argument lub tablicę:

'%.3f %s' % [ 10.341412, 'samples' ] 
# => "10.341 samples" 

aktualizacji: Jak podkreśla Philip, metoda ta ma również skrót:

'%{count} %{label}' % { count: 20, label: 'samples' } 
# => "20 samples" 

Oczywiście zakłada się, że path jest łańcuchem. W Ruby nigdy naprawdę nie wiesz na pewno, chyba że uważnie przeczytasz kod. Jest mało prawdopodobne, ale może to być %, co oznacza modulo.

Rzeczą, na którą można być pewnym jest to, że wywołuje metodę % na path.

+0

odrzucono, ponieważ nie uwzględniono tego, co się dzieje, gdy 'params' jest hashem, którym zwykle jest – Phlip

+0

@Phlip Dodałem notatkę na ten temat. Dzięki. – tadman

2

Wykonuje interpolację ciągów znaków. W najprostszym przypadku, jest to równoznaczne z:

"foo %s baz" % 'bar' 
#=> "foo bar baz" 

Jednakże, można użyć bardziej skomplikowanych formatami interpolować z tablicy lub obiektów zbyt Hash, takie jak Rails params hash. Szczegółowe informacje na temat konstruowania poprawnej specyfikacji formatu można znaleźć w metodach String#% i Kernel#sprintf.

+0

W szczególności, notacja '' foo =% {foo} "% {: foo => 'bar'}' używa '% {foo}' do rozszerzenia wartości mieszania według wartości. Zauważ, że niektóre inne języki użyłyby '% (foo) s' tam ... – Phlip

+0

@Phlip To świetny przykład na to, jak wykonać interpolację za pomocą klawiszy skrótu w specyfikatorze formatu. Dziękujemy za dodanie konstruktywnego komentarza! –