Я не уверен, что у вас проблемы с вашим кодом. Я думаю, что у вас есть проблемы с вашим тестом.
Ruby также использует символ обратной косой черты для escape-последовательностей в строках, поэтому при вводе строкового литерала "C:\Users\john\note.txt"
Ruby видит первые два обратных слеша как недопустимые escape-последовательности и поэтому игнорирует escape-символ. \n
относится к переводу строки. Таким образом, для Ruby этот литерал такой же, как "C:Usersjohn\note.txt"
. В этой последовательности нет разделителей файлов, поскольку \ n - это новая строка, а не обратная косая черта, за которой следует буква n , поэтому File.basename просто возвращает его при получении.
Если вы запрашиваете ввод данных пользователем в графическом интерфейсе (GUI) или в интерфейсе командной строки (CLI), пользователю, вводящему ввод, не нужно беспокоиться о escape-последовательностях Ruby String; они имеют значение только для строковых литералов непосредственно в коде. Попытайся! Введите gets
в IRB или Pry , введите или скопируйте путь к файлу и нажмите Введите и посмотрите, как Ruby отображает его в виде строкового литерала.
В Windows Ruby принимает пути, указанные как "/" (File :: SEPARATOR), так и "\\" ( File :: ALT_SEPARATOR ), поэтому вам не нужно беспокоиться о преобразовании, если только вы показываете его пользователю.