新的类项目显示为对象而不是字符串

时间:2016-02-13 20:43:14

标签: ruby

我仍然是Ruby的新手。我参加了Codecademy的课程,我现在正在做“决赛”,我必须在这里做一个待办事项清单。

待办事项列表的一个部分是能够添加任务(显然)。另一部分是能够显示所有当前任务。现在,从技术上讲,这两个都有效。但是,当我使用我创建的类(Task)创建一个新任务然后显示任务时,它会显示对象ID而不是字符串。如果我只使用我的add方法而不使用我的Task类,它将显示我想要的字符串。

我的目标是让我的脚本在使用Task类时显示字符串。如果有人可以向我解释为什么它不起作用以及我如何解决它,我会很感激。

以下是代码:

## Classes ##

#List Class - Used for anything involving the list
class List
  attr_reader :all_tasks

  def initialize
    @all_tasks = []
  end

  def add(task)
    all_tasks << task
  end

  def show
    all_tasks
  end
end

#Task Class - Used for anything involving Tasks
class Task
  attr_reader :description

  def initialize(description)
    @description = description
  end
end

## Modules ##
module Promptable
  def prompt(message = "What would you like to do?", symbol = " >: ")
    print message
    print symbol
    gets.chomp
  end

  def show
    menu
  end
end


module Menu
  def menu
    puts "
    'add' - Add a task to the list \n
    'delete' - Delete a task from the list \n
    'update' - Update a task in the list \n
    'show' - Shows current tasks in list"
  end
end

#Methods - various methods


#Program Runner
if __FILE__ == $PROGRAM_NAME
  include Menu
  include Promptable

  my_list = List.new
  puts "Please choose from the following list: "
  until ['q'].include?(user_input = prompt(show).downcase)
    case user_input
    when 'add'
      puts "What task would you like to do?"
      my_list.add(Task.new(gets.chomp))
    when 'q'
      puts "Qutting...."
    when 'show'
      puts my_list.show
    else "That is not a valid command"
    end
  end
end

1 个答案:

答案 0 :(得分:2)

puts my_list.show

将逐个显示任务。由于Task类没有to_s方法,因此将使用默认方法。只需添加一个:

class Task
  # ...

  alias to_s description
end

BTW字符串也是对象。 Ruby中的所有东西都是一个对象。