开发者

replace variable with its value in a ruby string, string itself is stored in a variable?

开发者 https://www.devze.com 2023-03-22 03:36 出处:网络
I have a variable containing a string and in run time i was to replace some variables which are stored in that string.

I have a variable containing a string and in run time i was to replace some variables which are stored in that string.

for example..

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

Output:-

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

issue is:

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.

Solution 1:

One way can be.. string replacment like using gsub.. but thats not good one..

PS:

What I am trying to achieve. We have some set of 100 messages that we have to deliver. I want to define at one single place and just replace some variable when needed. Now i want to define all these variables(100 ones) in the application_controller, so that I can just concatenate each variable(one开发者_如何学运维 of 100) defined. And automatically variable(variable which is defined in the string stored in one of those 100 variables). This language is quite confusing.. Check the example i explained above..


Or you can do this:

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" 


You could store a format string:

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

For multiple variables in the same string you can use

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

will result:--

"Congrats you have joined group1 group2" 


You can use the I18n functionality to replace variables:

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!'

This way you only have a single point to maintain your texts. Your application_controller is not the best place for static texts.


my_string = "Congrats you have joined groupName."
groupName = "*Name of my group*"
puts my_string.gsub('groupName',groupName)

Output :

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

What it does is search for the 'groupName' string and replace it with the content of the groupName variable


You can use eval to replace variables in runtime :

my_string = 'Congrats you have joined #{groupName}.'
groupName = "*Name of my group*"
puts eval('"'+ my_string +'"')
0

精彩评论

暂无评论...
验证码 换一张
取 消