Jestem naprawdę nowego do Ruby i staram się zrozumieć, jeśli istnieje specyficzny czas, kiedy należy używać ""
vs ''
.
Przez większość czasu używam pojedynczych cudzysłowów, ponieważ łatwiej jest pisać, ale nie jestem pewien, czy powinienem.
np. get 'user/new'
vsget "user/new"
Odpowiedzi:
" "
pozwala na interpolację ciągów, np .:źródło
poza interpolacją inną różnicą jest to, że „sekwencja ucieczki” nie działa w pojedynczym cudzysłowie
źródło
'don\'t'
.puts '\\'
Wypisze tylko pojedynczy ukośnik. patrz tutaj stackoverflow.com/questions/25499046/…Aby odpowiedzieć na twoje pytanie, musisz użyć,
""
gdy chcesz wykonać interpolację ciągów:W przeciwnym razie użyj prostych cudzysłowów.
Również jeśli zastanawiasz się, czy istnieje różnica w wydajności, jest doskonały w StackOverflow pytanie na ten temat.
A jeśli jesteś naprawdę nowy w RoR, zachęcam do sięgnięcia po porządną książkę Ruby, aby nauczyć się podstaw języka. Pomoże ci to zrozumieć, co robisz (i powstrzyma cię od myślenia, że Railsy to magia). Osobiście polecam The Well grounded Rubyist .
źródło
Istnieje różnica między pojedynczymi
''
i podwójnymi cudzysłowami""
w Rubim pod względem tego, co ma zostać ocenione jako łańcuch.Na początku chciałbym wyjaśnić, że w dosłownej formie łańcucha cokolwiek znajduje się między pojedynczym a podwójnym cudzysłowami, jest oceniane jako obiekt typu string, który jest instancją klasy Ruby String.
W związku z tym,
'stackoverflow'
i"stackoverflow"
zarówno oceni instancje klasy String z żadnej różnicy .Różnica
Zasadnicza różnica między dwoma literalnymi formami łańcuchów (apostrofami lub cudzysłowami) polega na tym, że cudzysłowy podwójne pozwalają na sekwencje specjalne, podczas gdy apostrofy nie!
Literał tekstowy utworzony za pomocą apostrofów nie obsługuje interpolacji ciągów i nie powoduje zmiany znaczenia sekwencji.
Zgrabnym przykładem jest:
natomiast
Interpolacja z pojedynczymi cudzysłowami w ogóle nie działa:
Najlepsze praktyki
Jak sugeruje większość Ruby Linters, używaj pojedynczych cudzysłowów dla swoich ciągów znaków i idź na podwójne w przypadku sekwencji interpolacji / ucieczki.
źródło
Przykład kodu ucieczki:
Przykład interpolacji:
źródło
Podobnie jak w przypadku odpowiedzi „\ n” w druku, poniżej znajduje się kolejny przypadek różnicy
więc wygląda na to, że * został zamieniony na znak ze znakiem ucieczki w cudzysłowach, ale nie w apostrofach. BTW, wpłynie to na wynik w przypadku użycia w wyrażeniu regularnym, np. Str.gsub (/ wyrażenie regularne /, '\ 1, \ 2')
źródło
Innym powodem, dla którego warto używać pojedynczych cudzysłowów, jest przekazywanie wzorca wyrażenia regularnego jako łańcucha:
Ten wzorzec wyrażenia regularnego będzie działać, ponieważ jest przekazywany w apostrofach:
Ten wzorzec wyrażenia regularnego nie powiedzie się, ponieważ jest przekazywany w cudzysłowach (aby to zadziałało, trzeba by od niego uciec podwójnie):
źródło
W tym konkretnym przypadku nie ma znaczenia, jak to napiszesz. Są równoważne. Możesz także przeczytać więcej przewodników / tutoriali dotyczących Rubiego :)
źródło