如何实现to_str或to_s

时间:2015-01-03 11:07:15

标签: ruby string type-conversion implicit-conversion magic-methods

我有一个应该用作字符串的类,它总是一个字符串(即使是空的)。该对象将始终具有字符串表示形式。以下是我班级的一个例子:

class Something
    def initialize
        @real_string_value = "hello"
    end
    def to_s
        return @real_string_value
    end
    def to_str
        return @real_string_value
    end
end

text = Something.new
puts("#{text}") #=> #<Something:0x83e008c>

我在minitest上运行了这个测试:

assert_equal(
    "",
    "#{@text}",
    "Unchanged class should convert to empty by default"
)

上述测试失败。为什么我的班级没有转换为字符串?

1 个答案:

答案 0 :(得分:1)

如果代码以脚本形式运行,则代码打印hello

如果您在irb或类似的交互式shell中运行代码,则会对以下行使用inspect而不是to_s方法:

text = Something.new

您需要定义inspect

class Something

    ...

    def inspect
        to_s
    end
end