我一直在做这个
puts “The temperature is “ + String(temperature) + “.”
在我的调试代码中,另一个选项是使用插值
puts “The temperature is #{temperature}.”
有没有那么麻烦的方法呢?
编辑:这只是用于调试,如果重要的话。
答案 0 :(得分:6)
对于像这样的小案例来说,没有什么是值得的。
尽管如此,你应该更喜欢插值,因为它比串联便宜。
答案 1 :(得分:2)
将动态变量插入字符串的最佳方法是
#interpolation
"foo #{my_var} bar"
它会在表达式返回的任何对象上调用to_s
方法并插入该字符串。它与
#concatenation
"foo " + my_var.to_s + " bar"
但是,正如wfarr所说,插值更快。也更容易阅读。
答案 2 :(得分:1)
稍微不同的方法是在自动化测试中使用断言。
例如使用Test :: Unit: -
assert_equal 25, temperature
我发现使用自动化测试可以大大减少我必须编写的调试代码量。
答案 3 :(得分:1)
使用Kernel#p
p temperature #=> 10.25
当我调试时,我经常只是通过复制行来标记这些语句,并使用插入冒号,使变量成为符号。
p :attributes #=> :attributes
p attributes #=> { :mood => "happy", 5 => [] }
或者
p [:location, location] #=> [ :location, "@ work" ]
请注意,内核#p在其参数上调用#inspect而不是#to_s,但这通常会提供更有用的调试信息。
答案 4 :(得分:1)
我强烈建议使用包含awesome_print或awesome_print的irbtools gem。 我个人认为在开发中使用它更快,更简单,然后使用插值字符串,有时这是唯一的方法。
你可以在任何对象上执行此操作,它将为您提供格式良好的输出,即数组,字符串或散列,甚至是您可能拥有的任何其他复杂对象 - 如打印为树结构的三维数组。为了让它在你的rails env中可用 - 只需将它包含在开发组的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
}
答案 5 :(得分:0)
始终可以使用printf
样式格式:
"The temperature is %s" % temperature
这样也可以更精细地格式化数字等。但老实说,与使用#{}
插值相比,你会期望得到多少“麻烦”?
答案 6 :(得分:0)
另一种方法是做一些像这样的蠢事:
"The temperature is %s." % temperature.to_s
我个人使用插值