
Mikhail
25.07.2017
09:44:50
я думал что extend и mixins - это ты только для новых объектов которые создаешь сам сделать можешь
а не для уже существующих
сейчас читаю вот про refinements

Fedor
25.07.2017
09:45:14
если очень очень грубо, то include позволяет получить из модуля медоты инстансов, а extend - методы классов

Google

Fedor
25.07.2017
09:45:51
хотя на самом деле это немного не так, там вся эта кухня на метаклассы завязана, тут лучше статьи читать, я не мастер такие тонскости рассказывать
2.4.0 :001 > class MyClass
2.4.0 :002?> end
=> nil
2.4.0 :003 > module MyModule
2.4.0 :004?> def do_smth
2.4.0 :005?> p 42
2.4.0 :006?> end
2.4.0 :007?> end
=> :do_smth
2.4.0 :008 > MyClass.include MyModule
=> MyClass
2.4.0 :009 > m1 = MyClass.new
=> #<MyClass:0x00000002141d90>
2.4.0 :010 > m1.do_smth
42
=> 42
2.4.0 :011 >

Alex
25.07.2017
09:46:35

Mikhail
25.07.2017
09:47:01

Fedor
25.07.2017
09:47:14
2.4.0 :001 > class MyClass
2.4.0 :002?> end
=> nil
2.4.0 :003 > module MyModule
2.4.0 :004?> def do_smth
2.4.0 :005?> p 42
2.4.0 :006?> end
2.4.0 :007?> end
=> :do_smth
2.4.0 :008 > MyClass.extend MyModule
=> MyClass
2.4.0 :009 > MyClass.do_smth
42
=> 42

Mikhail
25.07.2017
09:47:17

Fedor
25.07.2017
09:47:19
примерно так, если на примерах
хорошо, но вот эти тонкости с include и extend очень полезно знать в любом случае

Михаил
25.07.2017
09:48:48
Но ведь таск был в том чтобы расширить свойства конкретного объекта, а не его класса

Alex
25.07.2017
09:49:27

Mikhail
25.07.2017
09:49:32

Alex
25.07.2017
09:49:33
можно даже расширить конкретную строку

Михаил
25.07.2017
09:51:18

Google

Alex
25.07.2017
09:52:05
ну модуль то он синглтон
модуль же не инстанцируется

Mikhail
25.07.2017
09:52:44
Если я юзаю refine внутри класса, мне же не нужно будет внутри него писать using?
т.е. в методах этого класса, чтобы заюзать расширенный объект

Alex
25.07.2017
09:53:23

Mikhail
25.07.2017
09:55:09
т.е. в ModuleName делаем refine, потом срузу using ModuleName?

Alex
25.07.2017
09:56:55
вроде так

Михаил
25.07.2017
10:01:46
модуль же не инстанцируется
Да понял, ну тут можно использовать #extended в теле модуля, другой вариант - instance_eval, ну или рефайны, да. Просто рефайны очень редко вижу что используют, почему-то.

Alex
25.07.2017
10:02:12
> Просто рефайны очень редко вижу что используют, почему-то.
Просто народ не умеет в инкапсуляцию
нужно засрать глобальную область видимости как рельсы делают

Fedor
25.07.2017
10:02:57
просто в ruby все на monkeypatchaх и а refines как раз ограничивают его использование областью видимости
для пришельцев из C++ хорошо, для рубистов - непривычно

ojab
25.07.2017
10:09:35

Alex
25.07.2017
10:12:08

Fedor
25.07.2017
10:12:32
Сейчас их тоже почти нигде не видно
а вещь то хорошая

Alex
25.07.2017
10:12:45
Я достаю Cobol из широких штанин

ojab
25.07.2017
10:15:09

Alex
25.07.2017
10:15:30

Google

ojab
25.07.2017
10:16:45
А, ты просто жалуешь что в опенсурцном проекте внезапно никто не переписывает весь несовременный код под современный ruby сразу после выхода?

Alex
25.07.2017
10:17:59
Да
Более чем уверен что ща патчи с рефайнами будут отклоняться для совместимости.

ojab
25.07.2017
10:19:04
палю: refinements уже достаточно давно используются в рельсах
но ты почему-то более чем уверен, что патчи будут откланяться, ага

Vasiliy
25.07.2017
10:19:48
в рельсе же вроде адекватно воспринимают совместимость с последними версиями

ojab
25.07.2017
10:19:49
для совместимости с чем, если не секрет, кстати?

Vasiliy
25.07.2017
10:20:11
т.е. вполне ок что в 5.1 есть вещи не совместимые уже с 2.3

ojab
25.07.2017
10:20:45
нет, рельсы с 2.2+ работают

Vasiliy
25.07.2017
10:21:27
точно, посмотрел

Mikhail
25.07.2017
10:24:01
А как сюда код вставлять?
У меня тут с refine проблема

Fedor
25.07.2017
10:24:34
можно между тремя тильдами писать
но лучше в гист

Mikhail
25.07.2017
10:25:41
гист - это что?

Fedor
25.07.2017
10:25:56
https://gist.github.com/
если там мало кода то можно \``` code и в конце опять три эти хреновины
но он не подсвечивается, переносится и в целом неудобно так

Mikhail
25.07.2017
10:26:54
https://gist.github.com/milovidov/78b97695b1378d13aff0cde969136b93
вот код

Google

Mikhail
25.07.2017
10:27:02
ошибка такая
in `<module:NewsFeed>': uninitialized constant NewsFeed::AlyienNewsApi (NameError)
refine в самом начале

Vasiliy
25.07.2017
10:28:54
неймспейс не тот

Михаил
25.07.2017
10:28:59
У меня есть подозрение, что не может разрезолвить патч к NewsFeed::AlyienNewsAp, попробуй два двоеточия в начале, ::NewsFeed::AlyienNewsApi

Fedor
25.07.2017
10:29:12
он пытается AlyienNewsApi искать в модуле NewsFeed, как в неймспейсе в плюсах

Vasiliy
25.07.2017
10:29:19
ты ж в модуле работаешь, по умолчанию берется из его неймспейса

Admin
ERROR: S client not available

Mikhail
25.07.2017
10:30:22

Vasiliy
25.07.2017
10:32:05
refine ::AlyienNewsApi::Story зачем ты вообще в рефайны полез если не понимаешь как руби классы резолвит?

Fedor
25.07.2017
10:33:20

Mikhail
25.07.2017
10:33:41

Vasiliy
25.07.2017
10:34:31
ну ты сначала там без рефайнов лучше, через лишнюю переменную или ещё как более очевидно

Mikhail
25.07.2017
10:34:39
Вот узнал как руби классы резолвит, спасибо! :)

Vasiliy
25.07.2017
10:35:24
они удобны(по моему) когда ты какие-то гемы пишешь или либы, для прикладной задачи такое себе решение

Mikhail
25.07.2017
10:36:54

Vasiliy
25.07.2017
10:37:41
значит надо require 'aylien_news_api' смотреть

Mikhail
25.07.2017
10:38:45

Google

Vasiliy
25.07.2017
10:38:46
у тебя опечатка
AylienNewsApi ниже и вот это AlyienNewsApi ты рефайнишь

Mikhail
25.07.2017
10:42:52
сейчас все ок

Vasiliy
25.07.2017
10:43:39
вроде должно сейчас даже без :: работать

Mikhail
25.07.2017
10:44:05
В которой раз убеждаюсь, что язык имеет значение не только в программировании. На с++ чате мне бы уже рассказали какой я мудак :)
С++ - язык снобов. Руби - язык коллег :)

Alex
25.07.2017
10:50:02
ммм от контингента зависит
обычно так про русские форума пишут

Mikhail
25.07.2017
10:55:41
да нет, я и на с++ зарубежных форумах писал, там так же
реально от языка зависит и психология людей

Alex
25.07.2017
10:57:03
ну то что C++ это язык снобов - я готов поверить.
я больше по расту

Nikita
25.07.2017
16:07:09
блин, никто не знает, где можно найти подробную документацию по гему telegram-bot-ruby (на русском или английском)?

Alexander
25.07.2017
16:08:20
если это тот гем, про который я думаю, то мана из ридми более чем достаточно. Но гем говно, он только long polling умеет

Igor
25.07.2017
16:13:45
Кстати эта привычка моя потратила кучу драгоценного времени :(
В том плане что начинаю читать - разачаровываюсь
Начинаю другое искать

Alex
25.07.2017
16:36:12