运行此代码......
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 中的数组的值? (如果我理解正确的编程语言,终端的输出是对象本身,而不是存储在对象中的值。我理解对了吗?)
答案 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