2016-04-29 14 views
1

ich meinen Weg durch Rubys Codecademy Kurs arbeiten, und ich bin hier, um https://www.codecademy.com/en/courses/ruby-beginner-en-L3ZCI/1/6?curriculum_id=5059f8619189a5000201fbcb#Konvertieren von Array Procs und Symbolen

den richtigen Code oben (das verstehe ich nicht), um die Anordnung von Zahlen in eine umwandeln Array von Zeichenfolgen wird unten veröffentlicht.

numbers_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

    strings_array = numbers_array.map(&:to_s) 

Ich habe in diesem Code den Foren der Suche durch und googeln und an diesem Punkt bin ich immer noch verwirrt, was zum Teufel ist los.

Ich bin verwirrt von :to_s, weil to_s bedeutet, um in Zeichenfolgen und : steht für Symbole zu konvertieren. Ersetzt :to_s Sachen in Symbole oder Zeichenfolgen?

Ich bin verwirrt von & auch. Ich bekomme, dass das & Zeichen den Block, der es folgt, zu einem proc macht, aber hier ist es der Doppelpunkt für Symbol und die Methode, um in eine Zeichenfolge anstelle eines Blocks zu konvertieren, der dem Symbol & folgt.

Ich würde wirklich jede Hilfe zu schätzen wissen!

+0

Dies kommt ziemlich oft (http://symbolhound.com/?q=ruby+%26%3A), welche von denen gilt als ein Duplikat? –

+0

[Understanding \ [ClassOne, ClassTwo \] .each \ (&: mein_Method \)] (http://StackOverflow.Com/q/99318/2988), [Was bedeutet 'map (&: name) 'in Ruby? ?] (http://StackOverflow.Com/q/1217088/2988), [Was genau ist &: in Ruby groß?] (http://StackOverflow.Com/q/1792683/2988), [Ruby/Ruby on Rails Ampersand Doppelpunkt Verknüpfung] (http://StackOverflow.Com/q/1961030/2988), [Ruby: '&: symbol' Syntax] (http://StackOverflow.Com/q/2096975/2988), [ Was ist das '&: last' Ruby Construct Called?] (Http://StackOverflow.Com/q/2211751/2988), [Wie nennt man den '&:' Operator in Ruby?] (Http: // StackOverflow .Com/q/2259775/2988), –

+0

[Was macht 'map (&: name)' in diesem Ruby-Code?] (Http://StackOverflow.Com/q/2388337/2988), [Was sind ': + 'und' & + 'in Ruby?] (http://StackOverflow.Com/q/2697024/2988), [' &: views_count' in 'Post.published.collect (&: views_count)'] (http: //StackOverflow.Com/q/3888044/2988), [Ruby 'Proc' Syntax] (http://StackOverflow.Com/q/4512587/2988), [Ruby auf der Schiene s Block-Syntax mit '&:'] (http://StackOverflow.Com/q/4942285/2988), [Wie funktioniert "(1..4) .inject (&: +)' "in Ruby] (http://StackOverflow.Com/q/5003257/2988), [Ruby Kartenmethode Syntax Frage] (http://StackOverflow.Com/q/5231919/2988), –

Antwort

2

Was passiert ist, dass die Syntax &:to_s eine andere Möglichkeit ist, einen Block zu konstruieren, der die Methode, die mit dem Symbol übereinstimmt, auf jedem Element im Array aufruft. In Ihrem Fall ist es im Grunde das gleiche wie das Schreiben ist:

strings_array = numbers_array.map { |number| number.to_s } 

Hier ist ein weiteres Beispiel:

strings_array = numbers_array.map(&:to_f) 
# Same as 
strings_array = numbers_array.map { |number| number.to_f } 

Zur weiteren Erläuterung in Bezug auf die & Zeichen, sehen Sie, wie Sie eine Methode definieren würde, die ein akzeptiert Block als Argument.

def map(&block) 
    # .... 
end 

Nun ein Blick auf die verschiedenen Möglichkeiten, wie wir diese Methode aufrufen könnte, die alle das gleiche Ergebnis liefern wird.

# Block using bracket notation 
map { |n| n.to_i } 

# Block using do ... end notition 
map do |n| 
    n.to_i 
end 

# When using ampersand, ruby will try to treat the following as a 
# proc and use to proc as the block for the method. If we pass a proc 
# to it, then no problem. 
p = proc { |n| n.to_i } 
map(&p) 

# When using ampersand with a symbol (or any other non-proc objects), 
# ruby will try to call the to_proc method on the object and use that 
# as a block. And in the scenario of passing a symbol, the Symbol 
# object will return a proc that calls the method that matches the symbol. 
:to_i.to_proc => #<Proc:...> 
map(&:to_i) 
+0

Ich verstehe den Code, den Sie geschrieben haben, aber ich bin immer noch verwirrt, wie es in & übersetzt: to_s. Welchen Teil von dem, was Sie geschrieben haben, ersetzt das Symbolzeichen? Kann das & sign Verfahren sowohl in Procs als auch in Blöcke umwandeln? – MattGoldwater

+0

Siehe meine aktualisierte Antwort – DanneManne

+0

Ich sehe, dass das & Zeichen Methoden jetzt aufrufen kann. Ich bin immer noch verwirrt, was das Symbol bedeutet. – MattGoldwater

Verwandte Themen