Tldr: как я могу включить методы Обучения в класс Array и классы, созданные с минимальным кодом, без полной перестройки всего?Мои классы не могут использовать методы Обучения, такие как para
Я написал функциональную программу в Ruby, и теперь я хочу сделать из нее приложение для обуви.
У меня возникла проблема, описанная в начале руководства. Shoes.app - это своего рода блок сам по себе, поэтому само это всегда относится к нему, а методы обуви, такие как «пара», не обязательно будут доступный везде, где «помещает», находится в Ruby. Но я недостаточно умен, чтобы это исправить (я только что обнял себя и вернулся в чистый рубин, неся со мной)
Например, я создал новый метод для Array: putdata , который перебирает массив результатов теста учащихся, каждый из которых автоматически отображается в виде списка:
self.each do |ea|
puts/para "#{ea.topic}: #{ea.score}"
end
Работы в рубине. Не работает в обуви. Класс Array не имеет доступа к методу para. Я пробовал:
- решений массива < обувь (это действительно не нравится, что)
- добавление stack.app не делают ... конец в различных местах в программе (не влияет)
- пытается для вызова Shoes :: para вместо para (farts)
- Я попытался использовать файл require со всеми моими классами и методами in.rb вместо того же кода в файле (не сообщает метод для класса)
- попробовал выполнить мой код непосредственно перед вызовом метода, чтобы обеспечить, чтобы мой код находился в области обуви (не сообщает метод для класса)
- сделать мои собственные классы (курс и студент) < обувь, так что бы иметь доступ к его методам (вызывает ошибку времени выполнения)
Я получил его функционировать по: 1. Удаление этого бит кода из класса Array и делает его плавающим/обобщенным методом, а не методом Array 2. Ошибка частного метода -> затем перефразируйте его, а вместо метода Array (array.putdata) это общий метод, который принимает массив в качестве аргумента (putdata (array))
Но я действительно, действительно не хочу проходить через свой код и индивидуально его не организовывать.
Это моя первая программа с 1000 линиями, с 42 методами, и я много работал над тем, чтобы сделать ее максимально удобной и аккуратной, со всем, что скрывалось в классах или методах для удобства обслуживания. Я получил это от всего, в массивных, поэтапных общих методах вплоть до множества быстрых, которые казались немного более похожими на то, как должен идти ООП. Теперь единственный способ, с помощью которого я могу сделать эту работу, - это UN-OOP, и не имеет методов класса или чего-то еще.
Я надеялся, что смогу Обучить программу довольно плавно из этого опрятного функционального back-end: в программе Ruby есть много «если строка ==« SAVE », save (student); else ...», поэтому Я надеялся, что вы просто нажмите «button.click {save (student)}» с тем же обратным кодом.
Есть ли что-то фундаментальное, что мне не хватает, чтобы позволить мне сделать это? И могу ли я легко устранить проблему пара, поскольку все мои классы содержат способы отображения собственных данных? Я бы хотел, чтобы copypasta включал методы «Обувь» в верхней части каждого класса и делал это.
Или мне нужно писать с графическим интерфейсом в виду с самого начала в будущем?
(Информация о моей программе:.
Макет представляет собой набор страниц, связанный с боковой панели, используя индекс со связанными страницами, как скопировано прямо из Никто не знает обувь книги, или образец класса книги
Студенты могут вводить свои новые уровни и просматривать показания их текущего прогресса.
Существуют общие методы для основных «частей» программы, которые имеют такие вещи, как название страницы и некоторые инструкции, и которые затем вызовите объекты-ученики или методы модуля, чтобы выполнить действия, заданные пользователем.
Высшее: ученик - это нестандартный класс с такими методами, как «сохранить», «отобразить сплющенные данные», «добавить один на свой уровень, ЕСЛИ этот ELSE не нужен» и связанные с ним биты данных, такие как массив с все их объекты курса в.
Каждый курс также представляет собой пользовательский класс («Модуль»), в котором есть оценка, имя модуля и т. д. как переменные, а также некоторые крошечные методы, такие как отображение форматированного имени или добавление одного из них в этот модуль .)
Вы уже пробовали мое решение? – peter