Самый простой способ печатать не-строки в Ruby - PullRequest
2 голосов
/ 10 февраля 2009

Я постоянно этим занимаюсь

puts “The temperature is “ + String(temperature) + “.”

в моем коде отладки, и другой вариант - использовать интерполяцию

puts “The temperature is #{temperature}.”

Есть ли какой-нибудь менее громоздкий способ сделать это?

Редактировать: Это только для отладки, если это имеет значение.

Ответы [ 7 ]

6 голосов
/ 10 февраля 2009

Ничего такого, что стоит для таких маленьких дел.

Тем не менее, вы должны предпочесть интерполяцию, поскольку она дешевле, чем конкатенация.

2 голосов
/ 10 февраля 2009

Лучший способ вставить динамические переменные в строки -

#interpolation
"foo #{my_var} bar"

Он вызовет метод to_s для любого объекта, который возвращает выражение, и вставит эту строку. Это действительно так же, как

#concatenation
"foo " + my_var.to_s + " bar"

Но, как отметил wfarr, интерполяция выполняется быстрее. Легче читать тоже.

1 голос
/ 12 октября 2012

Я настоятельно рекомендую использовать гем irbtools, который включает в себя awesome_print или просто awesome_print. Лично я считаю, что это быстрее и менее громоздко использовать в dev, а затем использовать интерполированные строки, иногда это единственный путь.

Вы можете сделать это для любого объекта, и он даст вам красиво отформатированный результат, будь то массив, строка или хеш или даже любой другой сложный объект, который у вас может быть - например, 3-мерный массив, напечатанный в виде древовидной структуры. Чтобы он был доступен в вашей среде rails - просто включите его в Gemfile в группе разработчиков или добавьте в .irbrc - чтобы он всегда был в вашей консоли irb. Тогда просто сделай

require "awesome_print"
ap  MyGreatObject

вот пример вывода из одного из моих проектов

ap Address
class Address < ActiveRecord::Base {
                  :id => :integer,
      :address_line_1 => :string,
      :address_line_2 => :string,
      :address_line_3 => :string,
                :city => :string,
               :state => :string,
                 :zip => :string,
             :country => :string,
                :attn => :string,
         :category_id => :integer,
      :addressable_id => :integer,
    :addressable_type => :string,
          :created_at => :datetime,
          :updated_at => :datetime
}


 ap Address.first
  Address Load (1.0ms)  SELECT `addresses`.* FROM `addresses` LIMIT 1
#<Address:0x7bc5a00> {
                  :id => 1,
      :address_line_1 => "1 Sample Drive",
      :address_line_2 => nil,
      :address_line_3 => nil,
                :city => "Chicago",
               :state => "IL",
                 :zip => "60625",
             :country => "USA",
                :attn => nil,
         :category_id => 1,
      :addressable_id => 1,
    :addressable_type => "Warehouse",
          :created_at => Tue, 10 Jan 2012 14:42:20 CST -06:00,
          :updated_at => Tue, 17 Jan 2012 15:03:20 CST -06:00
}
1 голос
/ 12 февраля 2009

Использование Ядро # p

p temperature #=> 10.25

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

p :attributes #=> :attributes
p attributes  #=> { :mood => "happy", 5 => [] }

Или

p [:location, location] #=> [ :location, "@ work" ] 

Обратите внимание, что ядро ​​# p вызывает #inspect для своих аргументов, а не #to_s, но в любом случае это обычно обеспечивает более полезную информацию отладки.

1 голос
/ 10 февраля 2009

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

Например, используя Test :: Unit: -

assert_equal 25, temperature

Я считаю, что использование автоматических тестов значительно сокращает объем кода отладки, который я должен написать.

0 голосов
/ 10 февраля 2009

Другой способ - сделать что-нибудь глупое, как это:

"The temperature is %s." % temperature.to_s

Лично я бы использовал интерполяцию

0 голосов
/ 10 февраля 2009

Всегда есть возможность использовать стиль printf:

"The temperature is %s" % temperature

Это позволит более точно форматировать числа и т. Д. Но, честно говоря, насколько менее громоздким, чем использование #{} интерполяции, вы можете ожидать получить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...