@rubylang

Страница 37 из 1684
Aldar
02.06.2016
08:29:01
это рабочий код?

yopp
02.06.2016
08:34:56
Class это Object, а Object это Class
вот пиздеть не надо. Class инстанс класса Class

А цепочка наследования 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
Kernel там еще
Kernel это миксин

Vlad
02.06.2016
08:41:11
Kernel там еще
Kernel это модуль, который инклудится в Object, кажется

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
при поиске метода, он заглядывает в миксины

ой, то есть в модели приинклуденные

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
модуль встраивается в цепочку наследования конкретного класса
да, твоя правда, я подзабыл это, нашел портянку :) http://gshutler.com/2013/04/ruby-2-module-prepend/

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 уже без исключения

и как ретурн работает?
не, ты прав, всё так-же хуёво и работает :)

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

раньше можно было примерно прикинуть чо будет, поняв две вещи: существует ли ещё контекст в котором случился блок и возможен ли возврат по стеку

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