Szukam lepszego sposobu na scalanie zmiennych w łańcuch w Rubim.
Na przykład, jeśli ciąg jest podobny do:
„Theanimal
action
second_animal
"
I mam dla zmiennych animal
, action
i second_animal
to, co jest preferowanym sposobem na wprowadzenie tych zmiennych w na ciąg?
Możesz użyć formatowania podobnego do sprintf, aby wstrzyknąć wartości do ciągu. W tym celu ciąg musi zawierać symbole zastępcze. Umieść swoje argumenty w tablicy i użyj jednego z następujących sposobów: (Aby uzyskać więcej informacji, zajrzyj do dokumentacji Kernel :: sprintf .)
Możesz nawet jawnie określić numer argumentu i przetasować go wokół:
Lub określ argument za pomocą kluczy z krzyżykiem:
Zauważ, że musisz podać wartość dla wszystkich argumentów dla
%
operatora. Na przykład nie możesz uniknąć definiowaniaanimal
.źródło
Użyłbym
#{}
konstruktora, zgodnie z innymi odpowiedziami. Chcę również zwrócić uwagę, że jest tu prawdziwa subtelność, na którą należy uważać:Natomiast łańcuchy mogą być tworzone z apostrofami (o czym świadczy
first_name
ilast_name
zmiennych, konstruktor może być stosowany wyłącznie w ciągach o cudzysłowach.#{}
źródło
to inny sposób na zrobienie tego.
źródło
Nazywa się to interpolacją ciągów i robisz to w następujący sposób:
Ważne: zadziała tylko wtedy, gdy ciąg znaków znajduje się w cudzysłowie („”).
Przykład kodu, który nie będzie działał zgodnie z oczekiwaniami:
źródło
Standardowy system szablonów ERB może działać w Twoim scenariuszu.
źródło
Możesz go używać ze zmiennymi lokalnymi, na przykład:
@animal = "Dog"
@action = "licks"
@second_animal = "Bird"
"The #{@animal} #{@action} the #{@second_animal}"
wyjście byłoby: „The Pies liże Ptak ”
źródło