Single quote string string interpolation

十年热恋 提交于 2019-12-30 09:07:28

问题


I am trying to set an email address within ActionMailer with Rails. Before it was hard coded, but we want to make them ENV variables now so we don't need to amend code each time an email changes.

Here is how it's currently defined:

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

I've tried setting the email as an environment variable using ENV['EMAIL'] but I'm having no luck even with #{ENV['EMAIL'}.

Can anyone point me in the right direction?


回答1:


You cannot use string interpolation with single-quoted strings in Ruby.

But double-quoted strings can!

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

But if you want to keep your double-quotes wrapping the Name of Person, you can escape them with a backslash \:

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

Or use string concatenation:

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



回答2:


If you want to embed double quotes in an interpolated string you can use % notation delimiters (which Ruby stole from Perl), e.g.

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

or

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

Just pick a delimiter after the % that isn't already in your string.




回答3:


You can also use format. I have not seen it used as commonly in Ruby as in other languages (e.g. C, Python), but it works just as well:

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

Alternative syntax using the % operator:

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

Here is the documentation for format (aka sprintf):

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



来源:https://stackoverflow.com/questions/29828368/single-quote-string-string-interpolation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!