单引号字符串的插值

6

我正在尝试在Rails中使用ActionMailer设置电子邮件地址。以前是硬编码的,但现在我们想要将它们设置为环境变量,这样每次更改电子邮件时就不需要修改代码了。

以下是当前定义方式:

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

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

有人能指点我方向吗?


Action Mailer 基础 - 发送带有名称的电子邮件 - Stefan
3个回答

9

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

但是双引号的字符串可以!

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

但是如果你想保留双引号包裹“人名”,你可以用反斜杠\进行转义:

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

或者使用字符串拼接:

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

完美运作。我发誓昨天试过,但是一直得到空值。现在一切都正常了 :) 等时间过去后我会接受。 - DMH
顺便提一下,在Ruby中连接字符串时,您不必显式地放置+号。'"Name of Person" <' ENV['EMAIL'] '>'也可以工作。但是,我建议使用MrYoshiji提供的第一个/第二个示例。 - mmln
这并没有回答问题。有时你需要在单引号内插入Ruby代码(例如,在d3 js svg参数中,只允许单引号属性)。 - Kees Briggs

6
如果你想在插值字符串中嵌入双引号,你可以使用%符号定界符(这是Ruby从Perl中窃取的),例如:
from = %|"Name of Person", <#{ENV['EMAIL']}>|

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

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

2

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

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

使用百分号(%)运算符的另一种语法:
注:本翻译保留了HTML标签。
from = '"Name of Person", <%s>' % ENV["EMAIL"]

以下是关于format(又名sprintf)的文档:

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


使用百分号(%)更符合惯用语。 - the Tin Man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接