Войти на сайт

Авторизация, ждите ...
×
Правила раздела:
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.

ТЕМА: Руби - alias в модуле

Руби - alias в модуле 10 года 9 мес. назад #62160

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • Победитель Сбитой кодировкиОратор2 место ГотвПрограммист RubyУчитель
Сам вопрос: можно ли в модуле сделать копию функции? Пытался модифицировать модуль DataManager на дополнительные данные при сохронении в файл и т.п.. Пробывал уже разные вариации (все прописывалось внутри модуля):
alias new old #ругается что нет таких методов в модуле
alias self.new self.old #ругается что не ожидал увидеть здесь точку
new = old.clone #и то же самое с .self (ругается вообще на лодки в Game_Vehicle, инициализация не проходит)
С одной стороны можно полностью копировать старые методы вручную с доработкой, но такое скриптование имо не гибкое и дарует рак. Хотя, если решения не будет, сделаю и так.
Среда RPG Maker VX Ace
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Администратор запретил публиковать записи гостям.

Руби - alias в модуле 10 года 9 мес. назад #62161

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Программист Ruby3 местоПроект месяца 1 местоВетеранПисатель 3 местоУчитель1 место в ГотвОрганизатор конкурсовПроект месяца 2 место
гррр...
Окей.
Показываю еще раз.
alias <новое имя функции> <имя функции, которая присутствует в классе/модуле>

Пишем новый скрипт на заблаговременно созданной пустой странице. Пишем так:
class DataManager
alias mynewname save_game
def save_game
mynewgame
#твои действия
end
end
Администратор запретил публиковать записи гостям.

Руби - alias в модуле 10 года 9 мес. назад #62165

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Программист Ruby3 местоПроект месяца 1 местоВетеранПисатель 3 местоУчитель1 место в ГотвОрганизатор конкурсовПроект месяца 2 место
Более подробно - прошу прочитать здесь. Если возникнут вопросы, пиши их сюда, то есть, в свою тему :-)
Администратор запретил публиковать записи гостям.

Руби - alias в модуле 10 года 9 мес. назад #62170

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • Победитель Сбитой кодировкиОратор2 место ГотвПрограммист RubyУчитель
Эльф, как работает alias впринципе понятно, уже воплощал.Но беда настигла меня именно в модулях. К примеру код:
module DataManager
  @bonuslist = {}
  def self.add_bonus(name, type)
    @bonuslist[name] = type
  end
  alias create_game_objects_old create_game_objects
  def self.create_game_objects
    create_game_objects_old
    @bonuslist.each_pair do |ia, ib|
      tmp = ib.new
      eval("$"+ia.to_s+" = tmp")
    end
  end
end
Генерирует ошибку, что не видит метода create_game_objects в модуле. Не знаю как в других средах, но Эйс для определения метода в модуле требует префикс "self.". Я попробывал заменить строчку следующим:
alias self.create_game_objects_old self.create_game_objects
На этот раз вылетает о том, что точки там быть не должно. В полете фантазии я придумал еще эту строку
self.create_game_objects_old = self.create_game_objects.clone
С self и без. Но по какой то причине метод init из модуля не вызывается вообще, хоть он остался и нетронутым. (сама ошибка ругалась на то, что глобальныая переменная $data_system == nil, которую модуль и подгружал).
P.S. ссылки просмотрел, но там работа с классами, так что не помогло. И можно такой вопрос из любопытства - кроме тебя и пещерного скриптовики то есть? :)
P.S.S Или может есть какой скрипт на VX Ace, который бы переопределял именно модули?
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Последнее редактирование: 10 года 9 мес. назад от Amphilohiy.
Администратор запретил публиковать записи гостям.

Руби - alias в модуле 10 года 9 мес. назад #62171

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • Победитель Сбитой кодировкиОратор2 место ГотвПрограммист RubyУчитель
Тфу, осел, нашел солюшн, так что просто оставлю это здесь
DataManager_old = DataManager.clone
module DataManager
  @bonuslist = {}
  def self.add_bonus(name, type)
    @bonuslist[name] = type
  end
  def self.create_game_objects
    DataManager_old.create_game_objects
    @bonuslist.each_pair do |ia, ib|
      tmp = ib.new
      eval("$"+ia.to_s+" = tmp")
    end
  end
end
Пойду поражаться тому, какой я осел :)
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Cerberus

Руби - alias в модуле 10 года 9 мес. назад #62172

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Программист Ruby3 местоПроект месяца 1 местоВетеранПисатель 3 местоУчитель1 место в ГотвОрганизатор конкурсовПроект месяца 2 место
А еще в эйсе есть аналогия alias, которая названа alias_method кажется. Он используется во многих дополнительных скриптах для эйса и, наверное, является одним из стандартов RGSS3.
Чем он мне, собственно, и не нравится в RGSS3 - зачем создавать еще один новый метод, который будет работать аналогично, если уже есть другой, который можно чуть подкрутить под свои нужды?
Администратор запретил публиковать записи гостям.

Руби - alias в модуле 10 года 9 мес. назад #62175

  • Cerberus
  • Cerberus аватар
  • Вне сайта
  • Модератор
  • Собака злая
  • Сообщений: 2269
  • Спасибо получено: 1182
  • Организатор конкурсовПроект месяца 2 место2 место Сбитая кодировкаПроект месяца 3 место3 место ГотвПроект месяца 1 место3 место2 место Программист JavaScript Победитель Сбитой кодировки
Amphilohiy пишет:
И можно такой вопрос из любопытства - кроме тебя и пещерного скриптовики то есть? :)
Ну я что-то по мелочи ваять пытаюсь :) Но именно что по мелочи.
Жуть болотная, на лапках, в тапках и с пулемётом...
Администратор запретил публиковать записи гостям.

Руби - alias в модуле 10 года 9 мес. назад #62184

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • Победитель Сбитой кодировкиОратор2 место ГотвПрограммист RubyУчитель
Что касается alias_method, то вот что нарыл в гугле
http://andreacfm.com/2012/11/29/ruby-alias-vs-alias-method/
На инглише правда, но по примерам вроде понятно (правда непонятно толком зачем, но это уже другая история), тестить лень :( .
Еще я сильно подозреваю что на мои посты будет только эльф и отвечать, может сразу в личку ломиться? :laugh: (но это больше так, в шутку)
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Администратор запретил публиковать записи гостям.

Руби - alias в модуле 10 года 9 мес. назад #62185

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Программист Ruby3 местоПроект месяца 1 местоВетеранПисатель 3 местоУчитель1 место в ГотвОрганизатор конкурсовПроект месяца 2 место
Ну если только пещерный придет помогать))
Администратор запретил публиковать записи гостям.

Руби - alias в модуле 10 года 9 мес. назад #62186

  • caveman
  • caveman аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1274
  • Спасибо получено: 1307
  • Программист RubyПроект года 3 местоПроект месяца 1 место3 местоПроект месяца 3 местоРазработчик2 место ГотвУчительПроект года 1 местоОрганизатор конкурсов
я молчу, так как в модули не совался (таковых в хп маловато) и алиасы, соответственно, там не делал
Администратор запретил публиковать записи гостям.

Руби - alias в модуле 10 года 9 мес. назад #62188

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Программист Ruby3 местоПроект месяца 1 местоВетеранПисатель 3 местоУчитель1 место в ГотвОрганизатор конкурсовПроект месяца 2 место
Амфил, тогда - в личку со сложными вопросами, будем решать, а результаты полезные - можно и сюда.
Администратор запретил публиковать записи гостям.
Время создания страницы: 0.253 секунд