ruby - 为什么 Ruby 1.9.2 中的 to_s 改变了行为?

标签 ruby

看起来在 ruby​​ 1.9.2 中,如果定义了 to_s,inspect 将返回 to_s??为什么会发生这种变化?

这个:

class ToSClass
  def to_s
    "#{self.class.name} to_s called"
  end
end
class InspectClass
  def inspect
    "#{self.class.name} inspect called"
  end
end
class BothClass
  def inspect
    "#{self.class.name} inspect called"
  end
  def to_s
    "#{self.class.name} to_s called"
  end
end

c1 = ToSClass.new
puts c1.inspect
puts c1.to_s
c1 = InspectClass.new
puts c1.inspect
puts c1.to_s
c1 = BothClass.new
puts c1.inspect
puts c1.to_s

输出这个:

ToSClass to_s called
ToSClass to_s called
InspectClass inspect called
#<InspectClass:0x316baf8>
BothClass inspect called
BothClass to_s called

最佳答案

如果可用,Object#inspect 将调用 to_s。我认为行为没有改变。

我已经在 1.9.2 和 1.8.7 上运行了你的程序,没有发现任何区别。

$ rvm inspect.rb 1.9.2,1.9.1,1.8.7

info: 1.9.2 (ruby-1.9.2-p0): ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux] 

ToSClass to_s called
ToSClass to_s called
InspectClass inspect called
#<InspectClass:0x00000001941c80>
BothClass inspect called
BothClass to_s called

info: 1.9.1 (ruby-1.9.1-p378): ruby 1.9.1p378 (2010-01-10 revision 26273) [x86_64-linux] 

ToSClass to_s called
ToSClass to_s called
InspectClass inspect called
#<InspectClass:0x000000011594b8>
BothClass inspect called
BothClass to_s called

info: 1.8.7 (ruby-1.8.7-p302): ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux] 

ToSClass to_s called
ToSClass to_s called
InspectClass inspect called
#<InspectClass:0x7ffd795afd60>
BothClass inspect called
BothClass to_s called

关于ruby - 为什么 Ruby 1.9.2 中的 to_s 改变了行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3553146/

相关文章:

ruby-on-rails - Heroku Rails 应用程序在 HTTP 请求时立即崩溃

ruby - open-uri 没有将 http 重定向到 https

ruby-on-rails - Rails,从 Google Analytics 获取特定屏幕的数据

ruby-on-rails - RSpec 测试以两种方式编写,其中一种失败

ruby - 检查字符串是否包含数组中的子字符串并获得匹配项

Ruby,转换为字符串

html - 使用 selenium webdriver 和 ruby​​ 时 div 的 CSS 选择器

ruby - 为什么这会导致无限循环?

ruby - 使用 ChefSpec 基于模板测试文件初始化

ruby-on-rails - M. Hartl 的密码 Ruby on Rails 教程