2013-04-12 9 views
9

Są to instrukcje Codecademy za:Codecademy „konwersja między symbolami i smyczki” Ruby lekcji

Mamy tablicę ciągów chcielibyśmy później używać jako klawiszy skrótu, ale wolałabym być symbole. Utwórz nową tablicę, symbole. Użyj polecenia .each, aby wykonać iterację w tablicy ciągów i przekonwertuj każdy ciąg znaków na symbol, dodając te symbole do symboli.

Jest to kod pisałem (tablica strings został dostarczony):

strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"] 
symbols = [] 
strings.each { |x| x.to_sym } 
symbols.push(strings) 

Wiem, że prawdopodobnie robi wiele rzeczy źle, ale mam przez rubin śledzić tak daleko z bardzo małe trudności, więc nie jestem pewna, dlaczego ten mnie budzi. Po pierwsze, nie konwertuje łańcuchów do symboli, a po drugie, nie przesuwa ich do tablicy symboli.

+0

Sposób szukasz jest 'map'. 'symbols = strings.map {| str | str.to_sym} ' –

+0

@Rajendra_Prasad Nie używaj formatowania kodu (kliknięć) dla czegoś, co nie jest kodem. Formatowanie kodu nie służy podkreśleniu ani podkreśleniu terminów technicznych. – Gilles

+0

Codeacademy nie jest dokładna: nie można przekonwertować ciągu znaków na symbol z 'to_sym'. To, co możesz zrobić, to (cytując [doc] (http://ruby-doc.org/core-2.0/String.html # method-i-to_sym)) zwraca Symbol odpowiadający str, tworząc symbol, jeśli wcześniej nie istniał. Ciąg pozostaje nietknięty. – steenslag

Odpowiedz

16

Sam to_sym nie robił cokolwiek pożytecznego; konwertował ciąg znaków, ale nie przechowywał go nigdzie ani nie używał go później. Chcesz nadal dodawać do tablicy symboli.

strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"] 
symbols = [] 
strings.each { |s| symbols.push s.to_sym } 

Albo bardziej elegancko, można pominąć ustawianie symbols = [] i po prostu użyć map utworzyć go w jednej linii:

symbols = strings.map { |s| s.to_sym } 

map będzie przejść przez każdego elementu w tablicy i przekształcić go w coś innego w zależności do funkcji mapy. I dla prostych map, gdzie jesteś po prostu stosując funkcję, można zgłosić się o krok dalej: (. To tak samo jak symbols = strings.map(&:to_sym), korzystanie cokolwiek znaleźć bardziej gustowny)

symbols = strings.map &:to_sym 

+0

dziękuję. idę z twoją najlepszą odpowiedzią, ponieważ nie znalazłem jeszcze "mapy" na lekcjach. – syzygy333

+0

Dzięki - sprawdź API, istnieje wiele zgrabnych wbudowanych funkcji, takich jak mapa. http://www.ruby-doc.org/core-2.0/Enumerable.html – mahemoff

+0

Drugi przykład utworzył tablicę symboli za pomocą 'irb', ale CA tego nie zrobił. CA zezwalał tylko na pierwszy przykład. innym przykładem może być 'strings.each {| s | symbolss.push s.intern} ' – noobninja

1

iteruje po strings, stosuje blok do każdego elementu. Jednak nic nie zwraca. Będziemy chcieli, aby dodać do tablicy symbols w bloku samego:

strings.each { |x| symbols.push(x.to_sym) } 

jednak można wygenerować tablicę symboli w jednej linii, a także:

symbols = strings.map { |x| x.to_sym } 
0
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"] 

symbols = Array.new 
strings.each do |x| 
    symbols.push(x.to_sym) 
end 

powinien to być dokładna odpowiedź ..

1

można zmienić swój kod do następujących:

strings.each do |x| 
x = x.to_sym 
symbols.push(x) 
0

Trzeba zapisać nową wartość jako iteracyjne każdej wartości ciąg, przekonwertować go do symbolu, a następnie retun wartość

strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"] 
symbols = [] 
strings.each do |s| 
    s = s.to_sym 
    symbols.push(s) 
end 
+0

Moja odpowiedź opierała się właśnie na tym, dlaczego kod nie konwertował ciągów znaków do symbolu, a następnie nie przekazywał ich do symboli arrary opartych na instrukcjach kodecademy i przykładzie podanym uczniowi w tym miejscu kierunek. –

+0

@Matt uprzejmie, nagi na uwadze, uczeń nie został zapoznany z .map w tym punkcie jego ścieżki uczenia się na Codecademy –