Различие Между downcase и downcase! в Ruby

По умолчанию, как вы видели, find печатает полные пути:

$ find /home/people/name -type f
/home/people/name/filename1.txt
/home/people/name/filename3.txt
/home/people/name/filename2.txt

find, однако, предлагает контроль над выводом, используя -printf. Чтобы получить только имя файла без пути, попробуйте:

$ find /home/people/name -type f -printf '%f\n'
filename1.txt
filename3.txt
filename2.txt

%f говорит find, что вы хотите имя файла без пути. \n сообщает find, что вы хотите новую строку после каждого имени файла.

Вывод, конечно, может быть сохранен в файл:

$ find /home/people/name -type f -printf '%f\n' >output.txt
$ cat output.txt
filename1.txt
filename3.txt
filename2.txt
11
задан Andrew Grimm 2 February 2012 в 00:58
поделиться

2 ответа

Методы с восклицательным знаком в конце часто называют методами удара. Метод удара не обязательно изменяет свой получатель, а также нет никакой гарантии, что методы без восклицательного знака не делают.

Это очень хорошо, объяснил в этом сообщении в блоге. Процитировать сообщение:

! в именах методов тот конец с! средство, “Этот метод опасен” — или, более точно, этот метод, является “опасной” версией в других отношениях эквивалентного метода с тем же именем минус!. “Опасность” относительна;! не означает ничего вообще, если имя метода, в котором это находится, не соответствует подобному имени метода, но имени метода удара меньше.

и

! не означает, что “Этот метод изменяет свой получатель”. Много “опасных” методов действительно изменяет их получатели. Но некоторые не делают. Я повторяюсь:! не означает, что метод изменяет свой получатель.

33
ответ дан 3 December 2019 в 01:09
поделиться

Неудар downcase () метод просто возвращается, новый объект, представляющий Вас, представляют downcased в виде строки.

Версия удара изменяет Вашу строку саму.

my_text = "MY TEXT"
my_new_text = my_text.downcase
puts my_new_text # will print out "my text"
puts my_text     # will print out "MY TEXT" - the non-bang method doesn't touch it

my_text.downcase!

puts my_text # will print out "my text". The bang version has modified the object you're calling the method on
12
ответ дан 3 December 2019 в 01:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: