@proRuby

Страница 638 из 1594
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 >

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

Fedor
25.07.2017
09:47:19
примерно так, если на примерах

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

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

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

Михаил
25.07.2017
09:51:18
Как я понимаю, что то типа такого должно быть https://i.imgur.com/awgZqTz.png
ну поэтому не вижу почему нельзя использовать #extend к обьекту, т.е. obj.extend MyModule применится к синглтону obj, т.е. решение на картинке - как один из вариантов

Google
Alex
25.07.2017
09:52:05
ну модуль то он синглтон

модуль же не инстанцируется

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

т.е. в методах этого класса, чтобы заюзать расширенный объект

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
нужно засрать глобальную область видимости как рельсы делают
да-да, глупый DHH не догадался юзать refinements в 2005-ом, когда рельсы релизил

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
Ага, давай в 2017 продолжать манкипатчить
У тебя патчи для использования refinements не приняли или что?

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

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

Fedor
25.07.2017
10:33:20
так и как это решить?
"ток просто ::AlyienNewsApi"

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
AylienNewsApi ниже и вот это AlyienNewsApi ты рефайнишь
О, спасибо большое, детская ошибка блин!

сейчас все ок

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

Страница 638 из 1594