覆盖ruby中的to_s方法

时间:2016-02-16 02:36:20

标签: ruby

ruby​​中的所有类都继承自具有to_s方法的对象类,当您尝试打印对象时,此对象上调用to_s方法将其值转换为string.But在我的下面代码中我已覆盖to_s方法仍然是打印那些不可读的数据。为什么呢?

class Employee
  attr_reader :name,:salary

  def name=(value)
    if value == " "
      raise "Name can not be empty"
    end
    @name=value
    end

   def salary=(value)
     if value <0
       raise "Salary can not be negative"
     end
     @salary=value
   end 

   def print_pay_stub
     puts "Name : #{@name}"
     pay_for_period= (@salary/365)*30
     puts"Pay this period: #{pay_for_period}"
   end

   def to_s
          puts ("I am a hi man")
   end

end

ob=Employee.new
ob.name="akash"
ob.salary=900000
ob.print_pay_stub()
puts ob

输出:

Name : akash
Pay this period: 73950
I am a hi man
#<Employee:0x2b9bb28>

它打印了重写方法to_s中的内容,但为什么会有额外的字符串。

1 个答案:

答案 0 :(得分:1)

def to_s
  "I am a hi man"
end

您需要返回值,而不是输出它。