GOOGLE ADS

вторник, 12 апреля 2022 г.

Список частей класса

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

class Toy
attr_reader:name

def initialize(name)
@name = name
end
def shop
puts "#{@Toy}"
end
end
toy.shop

Я не уверен, как правильно запустить эту команду, но я совершенно уверен, что проблема в строке «toy.shop».


Решение проблемы

Рабочая переработка и упрощение

Есть ряд проблем с вашим текущим кодом. Поскольку в Ruby всегда есть несколько способов сделать практически все, вы можете сделать это и другими способами. Тем не менее, вот несколько ключевых вопросов:


  • На самом деле вы не используете #initialize.

  • Вы не создаете экземпляр нового объекта Toy с помощью Toy#new.

  • Вы не назначаете Toy#new локальной переменной игрушки.

  • Поскольку игрушка не определена, у нее нет доступа ни к одному из методов экземпляра Toy, например #shop.

  • Несуществующая переменная toy является получателем для метода #shop, поэтому она вызовет NameError, если игрушка не определена, или NoMethodError, если игрушка определена, но не является экземпляром класса Toy или другого класса, который может отвечать на метод #shop..


Основываясь на вашем ограниченном примере, я бы переписал и упростил код следующим образом:

class Toy 
attr_accessor:name

def shop
p "You bought a #{@name}."
end
end
toy = Toy.new
toy.name = "mouse"
toy.shop
#=> "You bought a mouse."

Почему Kernel#p вместо Kernel#puts

Обратите внимание, что Kernel#p не только напечатает ваш вывод в STDOUT, но также вернет значение, которое чрезвычайно полезно в REPL или при отладке кода. С другой стороны, Kernel#putsnil всегда возвращает результат, поэтому я обычно предпочитаю #p, если только вывод #inspect не является нежелательным по какой-либо причине. Ваш пробег в этом отношении может варьироваться.

Смотрите также


  • Ключевое defined? слово.

  • Переменное присвоение.

  • Синтаксис Руби.

  • Рубиновые исключения.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...