проверять дает мне \\ но ставить только \ - PullRequest
1 голос
/ 04 мая 2011

почему у меня разные результаты?

test_string = "C:/Program Files/TestPro/TestPro Automation Framework/"
puts test_string.gsub("/","\\\\")

#result is : C:\Program Files\TestPro\TestPro Automation Framework\

puts
puts test_string.gsub("/","\\\\") .inspect

#result as desired : C:\\Program Files\\TestPro\\TestPro Automation Framework\\

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

Ruby's String.inspect экранирует все специальные символы, поэтому вы видите "\\" с .inspect

См. String.inspect source здесь

if (c == '"'|| c == '\\' ||
    (c == '#' &&
     p < pend &&
     MBCLEN_CHARFOUND_P(rb_enc_precise_mbclen(p,pend,enc)) &&
     (cc = rb_enc_codepoint(p,pend,enc),
      (cc == '$' || cc == '@' || cc == '{')))) {
    if (p - n > prev) str_buf_cat(result, prev, p - n - prev);
    str_buf_cat2(result, "\\");
    prev = p - n;
    continue;
}

в основном, if c == '\', конкатенируйте к нему "\", чтобы он стал "\\"

Если вы хотите дважды избежать обратной косой черты, вам нужно попробовать с

test_string = "C:/Program Files/TestPro/TestPro Automation Framework/"
puts test_string.gsub("/","\\\\\\\\")

#C:\\Program Files\\TestPro\\TestPro Automation Framework\\
2 голосов
/ 04 мая 2011

puts вернет первую косую черту как символ перехода.Inspect не вызовет escape-слэши, поэтому он показывает оригинальную строку.

string = "\\Hello World!\\"
puts string
#=> "\Hello World!\"
string
#=> "\\Hello World!\\"

Так что, если вы попробуете это, это сработает:

puts "I am in \"Dog Bar\" now"
#=> "I am in "Dog Bar" now"
"I am in \"Dog Bar\" now"
#=> "I am in \"Dog Bar\" now"
"I am in "Dog Bar" now"
#=> SyntaxError: compile error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...