从任何路径替换红宝石中的正斜杠到反斜杠

时间:2017-12-29 05:07:21

标签: ruby-on-rails ruby ruby-on-rails-4

经过大量的研究和头脑风暴后,我终于放弃了,需要帮助将转发速度转换为单反斜杠但是我无法做到。

以下是我遵循的一些步骤,但它不起作用

if let loadedNavButtons: NavigationButtonsView = NSView.loadFromNib(nibName: "NavigationButtonsView", owner: self) as? NavigationButtonsView {
    // Do whatever you want with loadedNavButtons
}

我期望的结果应该是:

"C:/projects/test/code".gsub('/','\\')  => "C:\\projects\\test\\code" 

"C:/projects/test/code".gsub('/','\\\\') => "C:\\projects\\test\\code" 

"C:/projects/test/code".gsub('/',"\'\\'")  => "C:'projects/test/codeprojects'test/codetest'codecode" 

接受任何帮助和建议请帮助

2 个答案:

答案 0 :(得分:4)

你已经这样做了:

"C:/projects/test/code".gsub('\', '\\') # => "C:\\projects\\test\\code"
很可能你在输出中被\\搞糊涂了。这是正常的。试着说出这个:

puts "C:/projects/test/code".gsub(/\//, '\\') # => C:\projects\test\code

<强>更新

\用于Ruby(而不仅仅是)用于多行字符串连接,因此当您在irb中键入它时,它会继续读取用户的输入。

关于irb的一些注释:

当您在irb中执行某个命令时,它会输出结果以进行调试:

irb> "foo\r\nbar"
=> "foo\r\nba"

这一行包含\ r \ n什么意思转到新换行的开头。因此,如果你想在人类模式下看到它,只需打印它,它就会给出:

irb> puts "foo\r\nbar"
foo
bar

如果您想阻止输出,可以使用分号:

irb> s = "foo\r\nbar";
irb* puts s
foo
bar

答案 1 :(得分:3)

你在第一个例子中得到的正是你所需要的。在IRB / Pry中,表示不同,因为REPL旨在支持复制粘贴,并且您看到的字符串是具有单个反斜杠的精确字符串 ,如何在双引号内键入它。您可能还会注意到REPL表示中字符串周围的双引号,不属于字符串本身

这是完成任务的另一种更明确的方法:

result = "C:/projects/test/code".split('/').join('\\')
#⇒ "C:\\projects\\test\\code"

请参阅:

puts result
#⇒ C:\projects\test\code
result.count("\\")
#⇒ 3

事实上,Windows 确实理解带正斜杠的路径,因此您可能根本不需要这种转换。