Комментарии 22
print 'c:\\x.txt';
напечатает c:\x.txtЯ мало знаю про MySQL, но, кажется, там можно обойтись без String.raw
(см. ответ в соответствующей библиотеке).
По секрету скажу, что windows понимает оба варианта. А если какая-либо библиотека велосипедит свою валидацию — пишите багрепорты.
Обратный слеш нужен только в префиксе. Дальше все нормально воспринимается как минимум со времен XP. Оба варианта ниже работоспособны:
\\./C:/boot.ini
\\?/C:/boot.ini
Единственная причина использовать обратные слеши в Windows — это то, что всякие встроенные команды типа dir
воспринимают прямой слеш, как начало параметра.
Вот объяснение (немного про другие префиксы, но схема должна быть та же):
http://stackoverflow.com/a/25099634/2182162
Почему же тогда в руководствах советуют воздерживаться от использования конкретных разделителей для кросс-платформенности? Можно было бы во всех случаях использовать простую косую черту.
Да, можно и нужно использовать слеш. А если в руководстве даются рекомендации без пояснений, значит автор и сам не в курсе что и зачем.
@CaptainFlint а если в редких кейсах и требуется обратный слеш, то именно в этих местах делать .replace( /\//g , '\\' )
, а не рассовывать по всем библиотекам костыли вида "Hello" + require('os').EOL + "World"
.
Кроме того, в проекте может использоваться сторонняя библиотека, которая все пути автоматом приводит к префиксному виду (скажем, автор решил, что надо поддерживать длинные пути). И в эту библиотеку надо передавать обратный слэш, а во всех остальных местах программы использовать прямой? Такой подход только усугубит путаницу. В общем, всё зависит от конкретной ситуации. Просто надо иметь в виду эту особенность работы в Windows.
${'\\'}
.Возможно, хотя именно эта библиотека имеет несколько более крупную цель (на днях о ней вышла статья на авторитетном ресурсе, а не так давно я тоже пробовал соорудить что-то совсем простое в этом направлении). Но описанная проблема слишком низкоуровневая. Единственное, что мне приходит в голову, это сделать вариант String.raw
с добавлением trim()
, чтобы можно было использовать конечную косую черту с пробелом.
Я к тому, что у таких трюков большой потенциал. Я-то вряд ли порох изобрету, а вас или автора библиотеки, может, вдохновит на что-то интересное.
Ну и ограничения, очевидно, не обойти, раз они на уровне парсера. Можно перейти на что-то транслируемое в JS, где есть нужная функциональность, но это, опять же, дикий оверкилл. Зато не хак.
Ожидаются изменения: http://www.2ality.com/2016/09/template-literal-revision.html
String.raw: некоторые возможности и ограничения