заменить переменную на ее значение в строке ruby, сама строка хранится в переменной? - PullRequest
10 голосов
/ 21 июля 2011

У меня есть переменная, содержащая строку, и во время выполнения я должен был заменить некоторые переменные, которые хранятся в этой строке.

например ..

 my_string = "Congrats you have joined groupName."
 groupName = "*Name of my group*"
  puts my_string

Выход: -

 "Congrats you have joined *name of the group*"

вопрос:

my_string = " Congrats you have joined #{groupName}" expects groupName already exists.. but in my case i have to define my_string before variable in it.

Решение 1:

Одним из способов может быть .. замена строк, как при использовании gsub .., но это не очень хорошо ..

PS:

Чего я пытаюсь достичь. У нас есть набор из 100 сообщений, которые мы должны доставить. Я хочу определить в одном месте и просто заменить некоторые переменные, когда это необходимо. Теперь я хочу определить все эти переменные (100) в application_controller, чтобы я мог просто объединить каждую переменную (одну из 100), определенную. И автоматически переменная (переменная, которая определена в строке, хранящейся в одной из этих 100 переменных). Этот язык довольно запутанный. Посмотрите на пример, который я объяснил выше.

Ответы [ 5 ]

24 голосов
/ 21 декабря 2013

Или вы можете сделать это:

2.0.0-p247 :034 > a = "I love my live, says %{who}"
 => "I love my live, says %{who}" 
2.0.0-p247 :035 > a % { :who => "me" }
 => "I love my live, says me" 
12 голосов
/ 21 июля 2011

Вы можете сохранить строку формата:

my_string = "Congrats you have joined %s"
group_name = "My Group"
puts my_string % group_name # prints: Congrats you have joined My Group

Для нескольких переменных в одной строке вы можете использовать

my_string = "Congrats you have joined %s %s"
group_name = ['group1', 'group2']
puts my_string % ['group1', 'group2']  

приведет к: -

"Congrats you have joined group1 group2" 
3 голосов
/ 21 июля 2011

Вы можете использовать функциональность I18n для замены переменных:

I18n.backend.store_translations :en, 
  :congrats => 'Congrats you have joined %{group_name}!'
I18n.translate :congrats, :group_name => 'My Group'
# => 'Congrats you have joined My Group!'

Таким образом, у вас есть только одна точка для поддержки ваших текстов.Ваш application_controller не лучшее место для статических текстов.

0 голосов
/ 15 сентября 2011

Вы можете использовать eval для замены переменных во время выполнения:

my_string = 'Congrats you have joined #{groupName}.'
groupName = "*Name of my group*"
puts eval('"'+ my_string +'"')
0 голосов
/ 21 июля 2011
my_string = "Congrats you have joined groupName."
groupName = "*Name of my group*"
puts my_string.gsub('groupName',groupName)

Выход:

"Congrats you have joined *name of the group*"

Что он делает, это ищет строку 'groupName' и заменяет ее содержимым переменной groupName

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...