【问题标题】:replace variable with its value in a ruby string, string itself is stored in a variable?用红宝石字符串中的值替换变量,字符串本身存储在变量中?
【发布时间】:2013-12-21 07:05:02
【问题描述】:

我有一个包含字符串的变量,在运行时我要替换一些存储在该字符串中的变量。

例如..

 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 条消息需要传递。我想在一个地方定义,并在需要时替换一些变量。现在我想在 application_controller 中定义所有这些变量(100 个),这样我就可以连接每个定义的变量(100 个)。并自动变量(在存储在这 100 个变量之一中的字符串中定义的变量)。 这种语言很混乱..检查我上面解释的例子..

【问题讨论】:

  • 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. 不是有效的 Ruby 代码。它也不是有效的英语。

标签: ruby string


【解决方案1】:

或者你可以这样做:

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" 

【讨论】:

  • 这就是 Ruby 如此酷的原因。如果有人好奇,请参阅Kernel#sprintf 文档(最后一个示例)。
【解决方案2】:

您可以存储格式字符串:

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" 

【讨论】:

  • my_string % ['group1', 'group2']
【解决方案3】:

您可以使用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 不是静态文本的最佳位置。

【讨论】:

    【解决方案4】:
    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 变量的内容

    【讨论】:

    • 这只是一个 gsub 不是 gsub!它不会修改对象而是创建一个新字符串
    【解决方案5】:

    您可以在运行时使用 eval 替换变量:

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

    【讨论】:

    • 检查我的问题。我指定了这种格式的问题。
    • Mohit,注意my_string "'" 中的单引号,这个表达式在你使用eval之前不会被计算,所以你可以在定义变量之前定义字符串..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 2019-10-23
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2017-06-21
    相关资源
    最近更新 更多