Ruby - Проблемы с простой программой ToDo со списками классов и методов - PullRequest
0 голосов
/ 26 июня 2018

Я хочу сделать небольшую и простую программу списка задач. Я был пуст в течение пары часов на этом. Вот инструкции:

> # Write a program that keeps a list of todos. It should:
> # * Have two classes:
> #   * `Todo`
> #     * Has two methods:
> #       * `initialize`: Creates a new todo object. Takes a string as a
> #         parameter and stores it on the todo object.
> 
> #       * `text`: Takes no parameters. Returns the string that was
> #         stored when the todo object was created.
> 
>  
> #   * `TodoList`
> #     * Has three methods:
> #       * `initialize`: Creates a new todo list object. Takes no parameters.
> 
> #       * `add`: Takes a todo object as a parameter.  Stores it on the
> #         todo list object.
> 
> #       * `print`: Takes no parameters.  Creates a string of all the
> #         stored todos, one per line.  Each line should start with a
> #         `* `.  `puts`es the string.
> 
> #         * e.g.
> #           ```
> #           * get milk
> #           * get the papers
> #           ```

Вот моя попытка кода для программы:

class Todo
  def initialize(todo)
    @todo = todo
  end

  def text
    @todo
  end
end
class TodoList
  def initialize
    @todo_list = []
  end

  def add(todo)
    @todo_list << Todo.new(todo)
  end

  def print
    @todo_list.each do |x|
      puts "* #{x}"
    end
  end
end

Я знаю, что здесь чего-то не хватает, но я не могу видеть, что .. Когда я проверяю это, я прохожу все тесты, кроме 2, оба неудачных теста касаются метода печати, который описан в классе TodoList .

1 Ответ

0 голосов
/ 26 июня 2018

Немного расстроен тем, что происходит.

class Todo
  def initialize(todo)
    @todo = todo   # This sets your instance variable @todo to whatever you passing, you will probably want to add a check to make sure you only accept strings
  end

  def text
    @todo  # The text method is returning whatever the @todo variable is, in this case since you are passing a string, it is returning a string
  end
end

class TodoList
  def initialize
    @todo_list = []  # When you are initializing your TodoList you are creating an array called @todo_list
  end

  def add(todo)
    @todo_list << Todo.new(todo) # When you call this method you are adding a new instance of your Todo class
  end

  def print
    # Here you are iterating through your array @todo_list, which we established earlier is an array of your Todo Class variables
    @todo_list.each do |x| # Pro tip, try to stay away from using names like 'x' or 'y' use more descriptive names
      # Your 'x' variable here is one of your Todo classes instances
      puts "* #{x.text}" # As defined in your Todo class, you will need to call the text method to retrieve the text you stored in your class
    end
  end
end

list = TodoList.new  # Here we create a new instance of your TodoList class

list.add('Buy Pizza') # Here we can add items onto your todo list
list.add('Buy Pie')
list.add('Buy Potato')
list.print  # This is how you will print all the items you added to your TodoList

Это вернет

* Buy Pizza
* Buy Pie
* Buy Potato
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...