Я уверен, что это глупый вопрос для тех, кто знает, но я не могу найти объяснение того, что он делает или что это такое.
CSV.open('data.csv', 'r') do |row|
p row
end
Что делает "p row"?
Я уверен, что это глупый вопрос для тех, кто знает, но я не могу найти объяснение того, что он делает или что это такое.
CSV.open('data.csv', 'r') do |row|
p row
end
Что делает "p row"?
p() - это метод ядраОн записывает obj.inspect на стандартный вывод.
Поскольку объекты смешиваются в модуле ядра, метод p() доступен везде.
Общепринято, кстати, использовать его в режиме поэзии, что означает, что парицы отбрасываются. Фрагмент CSV может быть написан как...
CSV.open 'data.csv', 'r' do |row|
p row
end
Он документировал здесь с остальным модулем ядра.
Kernel#p - маленький брат-отладчик Kernel#puts: он более или менее работает точно так же, как и он, но он преобразует свои аргументы, используя #inspect вместо #to_s.
Причина, по которой у этого есть такое критическое имя, заключается в том, что вы можете быстро передать его в выражение и вынести его снова при отладке. (Я думаю, это намного менее полезно теперь, когда Ruby улучшает и улучшает "правильную" поддержку отладки.)
Некоторые альтернативы Kernel#p являются Kernel#pp (довольно печатная версия) из стандартной библиотеки pp и Kernel#y (YAML) из стандартной библиотеки yaml.
Почему бы не попробовать?
>> [1,2,3].each { |d| p d }
1
2
3
Другим вариантом для документации, которую вы уже имеете в вашей системе, является команда ri. В любое время вы можете ввести: ri p или если p определяется во множестве мест (что есть) для центральных команд, вы можете попробовать ri Kernel.p. Другие хорошие ставки: Array.<whatever method> или String.<whatever method>.
Если вы закончите установку кучки драгоценных камней, это значительно замедлит работу, но вы сможете найти быстрый кристалл, который ускоряет процесс поиска невероятно.
Ядро # p менее известно, чем печать и помещает.
Это похоже на то, что он добавляет новую строку, а не вызывает to_s, p вызывает проверку.
Ссылки
http://garethrees.co.uk/2013/05/04/p-vs-puts-vs-print-in-ruby/
Чтобы понять разницу между p и puts, вы должны понимать разницу между методами to_s() и instance().
to_s используется для получения строкового представления объекта, в то время как экземпляр является более доступной для разработчиков версией to_s, которая дает содержимое объектов как хорошо.
class Dog
def initialize(name, breed)
@name = name
@breed = breed
end
def to_s
puts "#@name breed is #@breed."
end
end
terra=Dog.new("Terra","Husky")
puts terra #Terra breed is Husky.
p terra #<Dog:0x00007fbde0932a88 @name="Terra", @breed="Husky">