终端显示对象但不显示值

时间:2017-01-13 20:35:12

标签: ruby object

运行此代码......

class List
  attr_reader :all_tasks

  def initialize
     @all_tasks = []
  end

  def add(task)
    all_tasks.push(task)
  end

  def show
    all_tasks
  end
end

class Task
  attr_reader :description

  def initialize(description)
    @description = description
  end
end

if __FILE__ == $PROGRAM_NAME
  my_list = List.new

  my_list.add(Task.new("FIRST"))
  puts my_list.all_tasks
  my_list.add(Task.new("SECOND"))
  my_list.add(Task.new("THIRD"))

  puts "Next line is my_list.show execution:"
  puts my_list.show
end

...我得到以下终端输出:

#<Task:0x007fb24b08fed0>
Next line is my_list.show execution:
#<Task:0x007fb24b08fed0>
#<Task:0x007fb24b08fdb8>
#<Task:0x007fb24b08fd68>

我的问题是,为什么我没有看到存储在 my_list 中的数组的? (如果我理解正确的编程语言,终端的输出是对象本身,而不是存储在对象中的值。我理解对了吗?)

2 个答案:

答案 0 :(得分:2)

它正在完成您要告诉它的事情,即show。 show方法返回任务数组,因此返回一个对象数组。修改show方法

def show
  all_tasks.each do |task|
     puts task.description
  end
end

这将返回每个任务描述。

只需将最后一行从puts my_list.show更改为my_list.show,因为puts已经在show方法中。

答案 1 :(得分:1)

 http://yoursite.com/about_us/what_we_do/india

表示类#<Task:0x007fb24b08fed0> 的实例,或者换句话说,是Task对象的实例。 它的标识为Task

这是不回答0x007fb24b08fed0方法的对象的标准Ruby表示。

您可以定义由to_s调用的Task#to_s

puts

输出变为:

class Task
  def to_s
    @description
  end
end

注意:如果您调用FIRST Next line is my_list.show execution: FIRST SECOND THIRD ,则会看到类,对象ID和已定义的实例变量。

Task#inspect