Powiel możliwe:
What does map(&:name) mean in Ruby?jaka jest funkcjonalność operatora "&:" w ruby?
natknąłem się na fragment kodu, który miał następujące
a.each_slice(2).map(&:reverse)
nie wiem funkcjonalność &:
operatora. Jak to działa?
Powiel możliwe:
What does map(&:name) mean in Ruby?jaka jest funkcjonalność operatora "&:" w ruby?
natknąłem się na fragment kodu, który miał następujące
a.each_slice(2).map(&:reverse)
nie wiem funkcjonalność &:
operatora. Jak to działa?
W Ruby nie ma operatora &:
. To, co widzisz, to operator &
zastosowany do :symbol
.
Na liście Sposób argumentu operator &
ma swój argument, konwertuje go w Proc
obiektu, jeśli jeszcze nie jest (poprzez wywołanie to_proc
na nim) i przekazuje go do sposobu jak blok zostały wykorzystane.
my_proc = Proc.new { puts "foo" }
my_method_call(&my_proc) # is identical to:
my_method_call { puts "foo" }
Pytanie więc teraz staje się „Co Symbol#to_proc
zrobić?”, A to łatwo zrozumieć, w the Rails documentation:
Okazuje symbol w prosty proc, co jest szczególnie przydatne dla wyliczeń. Przykłady:
# The same as people.collect { |p| p.name }
people.collect(&:name)
# The same as people.select { |p| p.manager? }.collect { |p| p.salary }
people.select(&:manager?).collect(&:salary)
Sugerujesz to, ale lepiej byłoby powiedzieć jednoznacznie: jest to modyfikacja, którą robi Rails, i nie jest wbudowana w samą Ruby. – kikito
@kikito: http://ruby-doc.org/core-1.9.3/Symbol.html#method-i-to_proc – tokland
Masz rację - właśnie wypróbowałem to w zwykłym irb (1.8.7), to jest w samej Ruby. Ten nie jest dostarczany przez Rails. Dzięki za poprawienie mojego błędu! – kikito
przez poprzedzenie &
do symbolu tworzysz funkcję lambda, która będzie wywołać metodę z nazwą tego symbolu na obiekt, który przenikał do tej funkcji. Biorąc to pod uwagę:
ar.map(&:reverse)
jest grubsza odpowiada:
ar.map { |element| element.reverse }
Proszę nie odpowiadać na zduplikowane pytania. Po prostu zagłosuj, aby zamknąć. To pytanie zostało już zadane i udzielono odpowiedzi 17 (!!!) razy, tak naprawdę * nic * zyskało, rozszerzając wiedzę jeszcze bardziej. –
Widziałem pytanie i odpowiedziałem. Został oznaczony jako duplikat dopiero po tym. –
To jest duplikatem nie mniej niż 17 innych pytań, które zostały już zadane i odpowiedzi tutaj na StackOverflow: [Zrozumienie \ [ClassOne , ClassTwo \] .each \ (&: my_method \)] (http://StackOverflow.Com/q/99318/), [Co znaczy "map (&: name)" w Ruby?] (Http: // StackOverflow.Com/q/1217088/), [Czym dokładnie jest 'i: capitalize' w Ruby?] (Http://StackOverflow.Com/q/1792683/), [Ruby/Ruby na Railsach i skrócie dwukropka] (http : //StackOverflow.Com/q/1961030/), [Ruby: '&: symbol' syntax] (http://StackOverflow.Com/q/2096975/), ... –
... [Co to jest '&: last' Ruby Construct Called?] (Http://StackOverflow.Com/q/2211751/), [Co nazywasz operatorem' &: 'w Rubim?] (Http: // /StackOverflow.Com/q/2259775/), [Do czego służy 'map (&: name)' w tym kodzie Ruby?] (Http://StackOverflow.Com/q/2388337/), [Czym są ': + 'i' & + 'w ruby?] (http://StackOverflow.Com/q/2697024/), [' &: views_count' w 'Post.published.collect (&: views_count)'] (http: // StackOverflow.Com/q/3888044/), [Ruby Proc Syntax] (http://StackOverflow.Com/q/4512587/), [W jaki sposób "' (1..4) .inject (&: +) '" praca w Rubim] (http://StackOverflow.Com/q/5003257/), ... –
... [Co robi następujące zdanie '&: property'?] (http://StackOverflow.Com/q/5620411/), [ Co oznacza '&' w następującej składni ruby?] (Http://StackOverflow.Com/q/5952175/), [Dlaczego ktoś użyłby operatora unarnego dla właściwości ruby? tj. '&: first'] (http://StackOverflow.Com/q/6289084/), [w jaki sposób' Array # map' ma parametr do zrobienia czegoś takiego?] (http://StackOverflow.Com/q/ 6716629 /) i [co oznacza '&:' w rubinie, czy jest to blok zmieszany z symbolem?] (Http://StackOverflow.Com/q/9188362/). –