单引号字符串字符串插值

Single quote string string interpolation

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

目前的定义如下:

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

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

任何人都可以指出我正确的方向吗?

您不能在 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 从 Perl 偷来的),例如

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

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

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

您也可以使用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