【问题标题】:Single quote string string interpolation单引号字符串字符串插值
【发布时间】:2015-07-01 22:18:05
【问题描述】:

我正在尝试使用 Rails 在 ActionMailer 中设置电子邮件地址。在它被硬编码之前,但我们现在想让它们成为 ENV 变量,这样我们就不需要在每次电子邮件更改时修改代码。

这是它目前的定义:

from = '"Name of Person" <email@email.com>'

我尝试使用ENV['EMAIL'] 将电子邮件设置为环境变量,但即使使用#{ENV['EMAIL'} 我也没有运气。

谁能指出我正确的方向?

【问题讨论】:

标签: ruby-on-rails ruby actionmailer string-interpolation


【解决方案1】:

您不能在 Ruby 中对单引号字符串使用字符串插值。

但是双引号字符串可以!

from = "'Name of Person' <#{ENV['EMAIL']}>"

但是,如果您想让双引号将 Name of Person 括起来,您可以使用反斜杠 \ 转义它们:

from = "\"Name of Person\" <#{ENV['EMAIL']}>"

或者使用字符串连接:

from = '"Name of Person" <' + ENV['EMAIL'] + '>'
# but I find it ugly

【讨论】:

  • 实现梦想。我可以发誓我昨天试过这个,但结果为零。现在所有作品:) 一旦时间过去,我将接受。
  • 顺便说一句,您不必显式放置 + 号来连接 ruby​​ 中的字符串 '"Name of Person" &lt;' ENV['EMAIL'] '&gt;' 也可以,但是我提倡使用 MrYoshiji 提供的第一个/第二个示例
  • 这不能回答问题。有时您需要在单引号内插入 ruby​​(例如,在 d3 js svg 参数中,它只允许单引号属性)。
【解决方案2】:

如果你想在一个内插字符串中嵌入双引号,你可以使用 % 符号分隔符(Ruby 从 Perl 中偷来的),例如

from = %|"Name of Person", <#{ENV['EMAIL']}>|

from = %("Name of Person", <#{ENV['EMAIL']}>)

只需在% 之后选择一个不在您的字符串中的分隔符。

【讨论】:

    【解决方案3】:

    您也可以使用format。我没有看到它在 Ruby 中像在其他语言(例如 C、Python)中那样普遍使用,但它也同样有效:

    from = format('"Name of Person", <%s>', ENV["EMAIL"])
    

    使用% 运算符的替代语法:

    from = '"Name of Person", <%s>' % ENV["EMAIL"]
    

    这是format(又名sprintf)的文档:

    http://ruby-doc.org/core-2.2.0/Kernel.html#method-i-format

    【讨论】:

    • 使用% 更习惯用法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    相关资源
    最近更新 更多