User Guide #16 - Ruby - Singleton методы

method, Ruby, ruby lesson, ruby уроки, singleton, user guide, руководство пользователя

Поведение экземпляра класса определяется его методом, но бывают случаи, когда мы знаем, что определённый экземпляр должен иметь особое поведение. В большинстве языков, мы должны решить эту проблему определением другого класса, который будет инстанцирован один раз. В Ruby же мы можем дать любому объекту свои собственные методы с конкретным поведением для одного конкретного экземпляра класса.

ruby> class SingletonTest
    |   def size
    |     print "25\n"
    |   end
    | end
   nil
ruby> test1 = SingletonTest.new
   #<SingletonTest:0xbc468>
ruby> test2 = SingletonTest.new
   #<SingletonTest:0xbae20>
ruby> def test2.size
    |   print "10\n"
    | end
   nil
ruby> test1.size
25
   nil
ruby> test2.size
10
   nil

В этом примере, test1 и test2 принадлежат одному классу, но test2 имеет переопределённый метод size и его поведение отлично. Данный метод, который имеет особое поведение для единственного объекта, называется Singleton методом.

Singleton методы часто используются для элементов в графических интерфейсах (GUI), где необходимо производить различные действия, когда нажимаются различные кнопки.

Singleton методы не являются уникальным для Ruby, так как они появились в CLOS, Dylan и т.д. Также некоторые языки, например, Self и NewtonScript имеют только singleton методы. Их иногда называют языками прототипирования.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
Поддержать автора Donate

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Donate

Здравствуйте, уважаемые пользователи EVILEG !!!

Если сайт вам помог, то поддержите разработку сайта финансово, пожалуйста.

Вы можете сделать это следующими способами:

Спасибо, Евгений Легоцкой

a
25 февраля 2020 г. 5:40
ayb

C++ - Тест 005. Структуры и Классы

  • Результат:83баллов,
  • Очки рейтинга4
ДЗ
24 февраля 2020 г. 14:47
Дмитрий Злобин

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:40баллов,
  • Очки рейтинга-8
p
17 февраля 2020 г. 14:41
pstMem

C++ - Тест 003. Условия и циклы

  • Результат:85баллов,
  • Очки рейтинга6
Последние комментарии
24 февраля 2020 г. 3:54
Евгений Легоцкой

Добрый день. Там будет url, на который указывает ссылка тега a в пагинаторе, если правильно помню )) Написал этот код и забыл.
B
24 февраля 2020 г. 0:37
BahaMeirman

Евгений Здравствуйте! Не могу понять вот эту часть кода: url: jQuery(this).attr('action') наверное здесь должен быть путь к url, тогда 'action' на какой url указывает?
17 февраля 2020 г. 3:22
Евгений Легоцкой

Добрый день. Это кастомный тег, помещается в файл, который находится в каталоге templatetags myapp/ templatetags/ myapp.py
B
16 февраля 2020 г. 13:36
BahaMeirman

Добрый вечер! Монжно по подробней о теге get_companion? ссылка не работает.
Сейчас обсуждают на форуме
a
25 февраля 2020 г. 8:06
ayb

Да
24 февраля 2020 г. 12:04
Евгений Легоцкой

Добрый день. Вот пример с дружественного ресурса с движением камеры
24 февраля 2020 г. 6:29
Евгений Легоцкой

Qt не предоставляет функционала по запросу root прав во время выполнения программы. Поэтому нужно использовать платформозависимый функционал, для Linux это будет выглядеть так: #include…
24 февраля 2020 г. 3:47
Евгений Легоцкой

Добрый день. Что означает клиентская область? Это изображение? Вам нужно распознавать символы текста или всё-таки пользователь будет вводить текст с клавиатуры, просто в любом месте "абстр…
VZ
21 февраля 2020 г. 5:19
Vladimir Zhitkovsky

void sendImage(int sessid, int type, int dest, int format, QString imgBase64Data){ QNetworkRequest request; request.setUrl(QUrl(ipAddress + "ctlapi/cmd=preparereportimg&sessid=…
EVILEG
О нас
Услуги
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB