【问题标题】:Is there any string syntax in Ruby that allows interpolation but no escape character?Ruby 中是否有任何允许插值但不允许转义字符的字符串语法?
【发布时间】:2012-06-07 02:01:21
【问题描述】:

Ruby 中是否有任何单行字符串文字语法允许字符串插值但不将反斜杠解释为转义字符?

即,

在哪里ruby_var = "foo"

我希望能够键入 C:\some\windows\path\#{ruby_var}\path 的等效项,从而生成字符串 C:\some\windows\path\foo\path,而不必转义反斜杠或求助于多行 heredoc。

puts "C:\some\windows\path\#{ruby_var}\path"
puts "C:\some\windows\path\path_#{ruby_var}\path"
=> C: omewindowspath#{ruby_var}path
=> C: omewindowspathpath_foopath

puts 'C:\some\windows\path\#{ruby_var}\path'
puts 'C:\some\windows\path\path_#{ruby_var}\path'
=> C:\some\windows\path\#{ruby_var}\path
=> C:\some\windows\path\path_#{ruby_var}\path

puts %{C:\some\windows\path\#{ruby_var}\path}
puts %{C:\some\windows\path\path_#{ruby_var}\path}
=> C: omewindowspath#{ruby_var}path
=> C: omewindowspathpath_foopath

puts %q{C:\some\windows\path\#{ruby_var}\path}
puts %q{C:\some\windows\path\path_#{ruby_var}\path}
=> C:\some\windows\path\#{ruby_var}\path
=> C:\some\windows\path\path_#{ruby_var}\path

【问题讨论】:

  • 您是否尝试过使用正斜杠? AFAIK Windows 通常不在乎您使用哪一个。
  • 我想我可以猜到你想要的输出是什么,但也许你可以把它包括在你的问题中,只是为了说清楚?
  • str11 = 'C:\some\windows\path\%{ruby_var}\path' % {ruby_var: "foo"} 供您收藏

标签: ruby


【解决方案1】:
ruby_var = "hello"
puts 'C:\some\windows\path\%s\path' % ruby_var
#=>C:\some\windows\path\hello\path

【讨论】:

  • 理论上也有ERB。 puts ERB.new('C:\some\<%= ruby_var %>\other').result(binding)
  • 这种语法有术语吗?我可以用谷歌搜索更多信息吗?
  • 搜索“ruby printf string syntax”并找到足够的继续。再次感谢 steenslag 和 megas!
【解决方案2】:
'C:\some\windows\path\%s\path' % ruby_var
#=> 'C:\some\windows\path\foo\path'

【讨论】:

  • steenslag 比你早一分钟,所以我接受了他的回答。谢谢
【解决方案3】:

我认为这是不可能的。

你应该考虑使用正斜杠来让它看起来更漂亮;我相信 Windows 中的标准 ruby​​ 库不会关心你使用什么样的斜线。

还有:

File.join('C:', 'path', ruby_var)

【讨论】:

    猜你喜欢
    • 2015-11-30
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    相关资源
    最近更新 更多