
Aldar
02.06.2016
08:29:01
это рабочий код?

yopp
02.06.2016
08:34:56
А цепочка наследования BO -> O -> Module -> Class

Google

yopp
02.06.2016
08:36:28
это, кстати, основная проблема
примерно 83% рубистов вообще нихуя не понимаю объектную модель руби

Vlad
02.06.2016
08:37:32
86
95 рубистов думают, что руби == рельсы
для них руби это нечто с чем приходиться делать, реально то нужны рельсы! рельсопрограммист!

Sergei
02.06.2016
08:40:10

Aldar
02.06.2016
08:40:30
что ещё можно спросить по объектной модели? там же всё очевидно, достаточно на картинку посмотреть с иерархией

yopp
02.06.2016
08:40:59

Vlad
02.06.2016
08:41:11

yopp
02.06.2016
08:41:12
де-юре он не входит в цепочку наследования

Sergei
02.06.2016
08:41:22
ну так то да

yopp
02.06.2016
08:41:25
но руби именно так и работает и включает миксины в цепочку

Aldar
02.06.2016
08:41:37
нужно знать как поиск метода работает

Google

Vlad
02.06.2016
08:41:40
при поиске метода, он заглядывает в миксины
ой, то есть в модели приинклуденные

yopp
02.06.2016
08:41:59

Vlad
02.06.2016
08:42:06
вот, и как ищет методы - это важно

Aldar
02.06.2016
08:42:08
сначала prepend модулях снизу вверх, потом в самом классе, потом в include модулях снизу вверх

Vlad
02.06.2016
08:42:17

yopp
02.06.2016
08:42:19
модуль встраивается в цепочку наследования конкретного класса
по этому есть append / prepend
для того чтоб определить куда конкретно в цепочке положить
и ищется оно именно так как ищется в обычной цепочке
а Class является ребёнком Module по простой причине
Module это хранилище методов

Sergei
02.06.2016
08:43:21
неа
почему не работает? там же вызов лямбды
через []

Aldar
02.06.2016
08:43:47
неа
работает, вместо call вызываем лямбду через []

Vlad
02.06.2016
08:44:34
скажем так, этот код вырван из контекста, и если [] работает как call, то ладно, тогда работает

Aldar
02.06.2016
08:44:54
короче кривая объектная модель у руби

yopp
02.06.2016
08:45:05

Vlad
02.06.2016
08:45:05
?

Google

Aldar
02.06.2016
08:45:09
без поллитры не разберешься

Adamtsov
02.06.2016
08:45:15
но если [] это call, то нах такая лямба, если ее потом с другими параматрами не вызывать

Vlad
02.06.2016
08:45:36
а зачем объявлять лямбду и сразу вызывать?
это же не js
сохрани её или передай в метод как callback
и там уже вызывай с чем угодно

Aldar
02.06.2016
08:46:05
чтобы спросить на собесе про это - как зачем?)

yopp
02.06.2016
08:46:33
если бы меня такую хуйню на собеседовании спросилии и не дали доступа к доке, яб нахуй послал

Vlad
02.06.2016
08:46:50
да-да, лямбды в чистом виде я редко вижу чтобы использовались, блоки обычно

yopp
02.06.2016
08:47:07
ща найду портянку

yopp
02.06.2016
08:47:27
и блок и есть закмыкние

Aldar
02.06.2016
08:47:42
val1 = true and false
val2 = true && false
чему равны val1, val2?

yopp
02.06.2016
08:47:45
разница между proc и lambda ваще эфемерная и упирается в то как они относятся к сигнатурам

Vlad
02.06.2016
08:47:49

yopp
02.06.2016
08:48:21
если вообще лямбды остались

Eugene
02.06.2016
08:48:58
Ещё один пост с этого паблика и не на прогерскую тему и я буду включать банхаммер.

yopp
02.06.2016
08:49:04
не осталось, да
Equivalent to Proc.new, except the resulting Proc objects check the number of parameters passed when called.

Google

yopp
02.06.2016
08:49:46
dj
https://innig.net/software/ruby/closures-in-ruby
старое, но очень простое

Aldar
02.06.2016
08:50:40
ещё return внутри proc и lambda по разному работают

yopp
02.06.2016
08:51:14
уже одинаково
раньше вообще jumperror был

Aldar
02.06.2016
08:51:32
это начиная с какого руби?
одинаково

yopp
02.06.2016
08:51:40
толи с 1.9 толи с 2.0

Admin
ERROR: S client not available

Aldar
02.06.2016
08:51:43
окей
и как ретурн работает?

yopp
02.06.2016
08:51:50
irb(main):009:0> lambda {return 1}.call
=> 1
irb(main):010:0> -> {return 1}.call
=> 1
как и ожидается :)

Aldar
02.06.2016
08:52:06
то есть выходит из лямбды и всё?

yopp
02.06.2016
08:52:32
прерывает выполнение блока и возвращает управление в контекст из которого был вызван блок, да
возвращая аргумент return
раньше с этим была адовая боль на самом деле
пушо надо было break использовать
хм

Google


yopp
02.06.2016
08:53:24
irb(main):011:0> [1,2,3].each { return 1 }
LocalJumpError: unexpected return
не, всё норм :)
скорее всего зависит от того как замыкание вызывается
если yield то return делать некуда
если .call то есть куда
irb(main):012:0> def cheap_eval; yield; end
=> nil
irb(main):013:0> cheap_eval { return 1 }
LocalJumpError: unexpected return
irb(main):014:0> cheap_eval { break 1 }
=> 1
irb(main):015:0> def stupid_eval(&blk)
irb(main):016:1> blk.call
irb(main):017:1> end
=> nil
irb(main):018:0> stupid_eval { return 1 }
LocalJumpError: unexpected return
хм. оукей!
irb(main):019:0> boo = -> { return 1 }
=> #<Proc:0x007f9761a69b68@(irb):19 (lambda)>
irb(main):020:0> boo.call
=> 1
irb(main):021:0> stupid_eval &boo
=> 1
не все Proc одинаково полезны :)
пушо при захвате блока как аргумента блок кастится в Proc на самом деле
кек
irb(main):022:0> cheap_eval &boo
LocalJumpError: unexpected return
обожаю замыкания в руби
а, это в 2.0.0
в 2.3.1 уже без исключения
они там часть вещей подрихтовали, но теперь вообще логика инопланетная
раньше можно было примерно прикинуть чо будет, поняв две вещи: существует ли ещё контекст в котором случился блок и возможен ли возврат по стеку