@rubylang

Страница 140 из 1684
Nikolay
01.07.2016
14:10:44
как лучше сделать raise NotAuthorized?

Иван
01.07.2016
15:03:28
Привет, объяните пожалуйста вот это - "Если подкласс использует переменную экземпляра с таким же именем, как и у переменной, используемой одним из его предков, он перепишет значение переменной своих предков"

Nikolay
01.07.2016
15:04:28
классический override, если я правильно понял

I
01.07.2016
15:07:04
ну а так да, просто переопределение

Google
Иван
01.07.2016
15:09:16
переменные экземпляра принадлежат экземплярам класса и в наследовании не учавтсвуют, так?

я не понимаю как подкласс может переписать значение переменной экземпляра класса

какой нибдуь пример что ли

для понимания

Nikolay
01.07.2016
15:10:04
я б тоже послушал

yopp
01.07.2016
15:14:49
ivars не учавствуют в наследовании, да

а вот cvars (@@) да

скорее всего про них разговор

скоуп @@ это все дети вниз помоему

Иван
01.07.2016
15:15:31
если что это циатата из книги "Язык програмирования Ruby" Флэнагана и Мацумото глава 7.3.5

yopp
01.07.2016
15:15:49
трудности перевода

Nikolay
01.07.2016
15:15:52
я пока туда не дошел еще, с нуля читаю :)

yopp
01.07.2016
15:15:56
читайте оригинал

Google
Nikolay
01.07.2016
15:16:21
угу.

Иван
01.07.2016
15:16:26
называется наследование и переменные экземпляра так что видимо все таки не про переменные класса речь идет

а вот оригинал - " If a subclass uses an instance variable with the same name as a variable used by one of its ancestors, it will overwrite the value of its ancestor's variable"

yopp
01.07.2016
15:21:31
o_O

Иван
01.07.2016
15:21:40
и все равно не понятно ?

Nikolay
01.07.2016
15:22:03
даже я понял :)

Иван
01.07.2016
15:29:19
может тогда напишешь пример простенький для наглядности?

yopp
01.07.2016
15:40:07
я проще объясню почему это хуйня: @ хранится внутри объекта

нет, плохой аргумент

а, господи

я понял что они имеют ввиду

Иван
01.07.2016
15:43:03
?

yopp
01.07.2016
15:45:10
repl.it помер

Mikhail
01.07.2016
15:47:44
народ скажите у counter_cache можно ли задать состояние

belongs_to :book, counter_cache: true, и добавить бы joins(:users).where(user: { status: 'active' })

както так

yopp
01.07.2016
15:49:03
короче

https://repl.it/C8BF

идея в чём

они очень хуёво выразились

Google
yopp
01.07.2016
15:49:21
вот у тебя есть какой-то гем, в котором есть реализация Animal

ты не смотрел в реализацию и решил сделать свой сабкласс Dog

и по какой-то причине выбрал имя ivar такое-же как в суперклассе

и вот пожалуйста, у тебя бага

идея в чём: в руби объект это очень простая штука

это одна таблица ivar ссылка на класс ссылка на собственный класс

и флаги

всё

больше в объекте ничего совершенно нет

там есть хитрость с @@

но это к вопросу отношения не имеет

так вот

yopp
01.07.2016
15:52:32
реализация отделена от данных

данные == ivar

реализация == методы

так что не важно где у тебя определён метод

в целом надо запомнить следующую штуку: self это ключевая вещь в разрешении всего чего угодно

кроме констант :)

https://repl.it/C8BF/1

короче вот простой пример

Google
yopp
01.07.2016
16:01:51
даже вот так нагляднее будет https://repl.it/C8BF/2

Иван
01.07.2016
16:02:37
спасибо большое, сейчас посмотрю

yopp
01.07.2016
16:02:46
что тут происходит: мы объявляем блок

блок это просто область кода, которую можно выполнять в контексте любого объекта

тут важное замечаение: в руби есть два, гхм, контекста

первый, который задётся self и влияет на разрешение методов и ivar

второй, биндинг, который влияет на список локальных переменных

блок это две вещи: указатель на текущий биндинг и его родителей и собственно код

Aldar
01.07.2016
16:05:09
Самая адекватная книга по руби это Well grounded rubyist

Admin
ERROR: S client not available

Aldar
01.07.2016
16:05:21
А по ООП это книга Sandy Metz

yopp
01.07.2016
16:06:02
так вот: у блока нельзя изменить биндинг, после того как блок был захвачен, но легко можно изменить self

instance_eval именно это и делает

не знаю почему они в книге так сложно про это написали, скорее всего старались избежать разборки устройства объекта

а зря

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

(методы самом деле тоже данные, потому что метод это такой частны случай замыкания)

я кончил

Иван
01.07.2016
16:09:36
хорошо, а я постараюсь это все переварить :)

cgfcb,j

Google
Иван
01.07.2016
16:09:44
спасибо

yopp
01.07.2016
16:10:10
просто надо запомнить что @ это self@

и hello это на самом деле self.hello

и да, в руби объявление локальной переменной имеет приоритет выше чем вызов метода, так что hello = :foo всегда будет определять локальную переменную, даже если есть метод hello=

это так, для справки

Иван
01.07.2016
16:33:23
грубо говоря всё что они хотели сказать это - следи за контекстом?

Nikolay
01.07.2016
16:50:52
ух ты

render :status => 404 unless @contact не работает (

render :text => 'Not Found', :status => '404' а так работает

Aldar
01.07.2016
17:45:37
https://www.youtube.com/watch?v=SWEts0rlezA

Кто ещё не видел, смотреть!)

Mikhail
01.07.2016
17:52:16
Да все наверно блог читают

Nikolay
01.07.2016
17:53:08
belongs_to :reseller, through: :client

шо за нахрен

Mikhail
01.07.2016
17:54:09
Связь через

Nikolay
01.07.2016
17:54:22
оно в ексепшен валится

Mikhail
01.07.2016
17:54:33
Неумело варишь

Nikolay
01.07.2016
17:54:45
ну подскажи блин

Mikhail
01.07.2016
17:54:57
В доках написано как варить

Nikolay
01.07.2016
17:55:06
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Mikhail
01.07.2016
17:55:08
Rusrails связи

Nikolay
01.07.2016
17:55:12
ок. беру доку

Страница 140 из 1684