
Artem
29.09.2016
16:54:41
эм, то есть у тебя может ключ содержать значение nil?
2.3.1 :002 > hash = { 'country' => {} }
=> {"country"=>{}}
2.3.1 :003 > hash['country'].fetch('city', {})['street']
=> nil

Serhii
29.09.2016
16:56:36
а, стоп! все понятно - я прочитал твой фетч как с блоком. тогда это получается тоже самое что и через мой дефолт

Artem
29.09.2016
16:58:06
если придираться, то не совсем :) дефолтное значение возвращается при любом недостающем ключе, а fetch делает ассерт только там где ему укажешь

Google

Serhii
29.09.2016
17:00:11
ну то пример такой... ключа может не быть в любом месте

Artem
29.09.2016
17:00:47
¯\_(ツ)_/¯

Serhii
29.09.2016
17:01:02
а я не пойму dig только в 2.3.0 p1 есть? ибо в p0 не откликается :-/

Artem
29.09.2016
17:01:36
можно тогда создать через Hash.new({})
что за р1/р0?

Serhii
29.09.2016
17:02:49
ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290)
preview0

Artem
29.09.2016
17:03:17
смотри ченжлоги :) у меня 2.3.1
обновить не варик?

Serhii
29.09.2016
17:03:59
уже обновил, прост странно что в p0 нет, а в p1 есть

Aleserche
29.09.2016
17:08:22
одна из болей рубей
минорные версии порой отличаются так, будто это мажорные версии
но это нормально, к этому очень быстро привыкаешь

Google

Artem
29.09.2016
17:10:27
хз, вроде дата та же что и у тебя
https://www.ruby-lang.org/en/news/2015/12/25/ruby-2-3-0-released/

Serhii
29.09.2016
17:12:02
всетаки по поводу 2.3.0р0 то я соврал.. метод есть, ошибку не дочитал до конца был позвал dig(:a, :b, :c), но в ;a прописан fixnum и вышло что он зовет fixnum.dig(:b, :c)
надо короче свой диг делать )))

Artem
29.09.2016
17:15:51
то что у тебя такая ситуация возникает скорее говорит о неудачном дизайне программы

Serhii
29.09.2016
17:16:38
ну это не мой дизайн, хеш АПИ возвращает

Artem
29.09.2016
17:18:24
и там может быть либо число, либо хэш?
значит дизайн api не очень хороший :)

Serhii
29.09.2016
17:21:02
не, числа нет, ветка хеша может быть, а может и не быть
про число то я так уже придираюсь ))
еще одну штуку захотелось - как переписать метод #[] у хеша или массива?

Artem
29.09.2016
17:24:05
не надо этого делать
http://mokevnin.github.io/blog/2013/11/14/pnu/

Serhii
29.09.2016
17:27:06
это так чисто из любопытства, не для продакшена. просто интересно можно ли его переписать или нет

Artem
29.09.2016
17:27:52
в руби возможно все
class Hash
def [](key)
puts 'surprise motherfucker'
end
end
хах, забавно
попробовал это в pry сделать, сразу эксепшены поперли)

Serhii
29.09.2016
17:30:59
да так я пробовал, у меня вообще irb валится ))

Artem
29.09.2016
17:31:22
слишком много на этот метод полагается :)

Ivan
29.09.2016
17:31:28

Google

Ivan
29.09.2016
17:31:33
попробуй

Artem
29.09.2016
17:31:34
нет

Ivan
29.09.2016
17:31:37
дописаит

Artem
29.09.2016
17:31:43
не сработает

Ivan
29.09.2016
17:31:46
ть*

Serhii
29.09.2016
17:31:52
и то что ты написал будет hash.[] 'key'

Ivan
29.09.2016
17:32:00
а, да, этож не наследование

Artem
29.09.2016
17:32:32
Serhii эм, вообще-то hash[key] это сахар над тем что ты написал

Serhii
29.09.2016
17:32:34
hash[] - кажется мне руби средствами не сделать

Artem
29.09.2016
17:32:49
1 + 1 это сахар над 1.+(1)
можешь попробовать сам
в руби все объект и все работает через передачу сообщений

Artem
29.09.2016
17:34:04
1.send(:+, 1)

Serhii
29.09.2016
17:36:19
ну про циферки я в курсе, [] като по другому пересылается

Artem
29.09.2016
17:36:52
нет
{ a: 1 }.send(:[], :a)
я кстати нашел способ как переопределить []
class Hash
alias_method :original_get_value, :[]
def [](key)
puts 'surprise motherfucker'
original_get_value(key)
end
end

Serhii
29.09.2016
17:38:52
таким образом вызывается hash.[](:a) - с такой обработкой все понтяно. интересно именно hash[]

Artem
29.09.2016
17:39:18
ну дак этим уже интерпретатор занимается

Google

Artem
29.09.2016
17:40:00
суть в том что это просто сахар, внутри там обычная отправка сообщения идет

Serhii
29.09.2016
17:40:29
тоесть если я хочу например сделать свой объект где для доступа к ключу используется T:keyT, а не [:key]. например myobjectT:aT
как же это извращенчески выглядит :-DD

Artem
29.09.2016
17:40:58
пиши свой external dsl
cucumber например так и сделан

Serhii
29.09.2016
17:41:21
))

Artem
29.09.2016
17:41:25
всякие slim/haml тоже

Admin
ERROR: S client not available

Artem
29.09.2016
17:43:13
насчет последних возможно погорячился.. там просто парсеры, наверно

Serhii
29.09.2016
17:43:55

Artem
29.09.2016
17:44:25
вот поэтому не надо манки-патчингом заниматься :)
такие ошибки дебажатся днями, если не неделями

Serhii
29.09.2016
17:47:52
если свой класс на базе хеша то почему бы и нет
...если очень сильно надо :)

Artem
29.09.2016
17:48:10
ну свой класс это отдельная тема
тут ты волен делать что хочешь
главное в кор классы не лезть

Serhii
29.09.2016
17:50:43
да, хотя иногда очень хочется. вот недавно очень не хватало String.to_a, что бы не писать через сплит

Artem
29.09.2016
17:55:56
попробуй другие языки, где нет возможности расширять кор классы :) потом даже мыслей таких не будет

Eugene
29.09.2016
17:57:03

Google

Artem
29.09.2016
17:58:16
фрей напомнил про такую штуку http://timelessrepo.com/refinements-in-ruby

Serhii
29.09.2016
17:58:59
это она вроде и есть
а какой метод отвечает за ответ на просто имя инстанса?
2.3.1 :028 > test = Test.new
=> #<Test:0x0000000160a008 @value="Some text">
2.3.1 :029 > test
=> #<Test:0x0000000160a008 @value="Some text">а хочется что бы на test вывалило значение @value

Ivan
29.09.2016
18:33:10
Кажется

Artem
29.09.2016
18:36:57
угу, в irb прокатывает, pry все равно дополнительную инфу выводит

Eugene
29.09.2016
19:48:56
Народ, кто-нибудь из Новосибирска или окрестностей есть?

Serhii
29.09.2016
20:19:17
Что там так манит?

Ivan
29.09.2016
20:19:29

Sergey
29.09.2016
20:24:05
Мне новосиб не понравился в свое время
Слишком серым показался

Eugene
29.09.2016
20:27:41
серый и есть
в конце сентября там конфа будет, поеду
думал мож кто еще подтянется

Nikita
29.09.2016
20:34:13
У меня в новосибе у знакомого контора. Туда нужны были рубисты))

Sergey
29.09.2016
20:36:10
Я думаю Евгений свободный художник ;)

Ivan
29.09.2016
21:44:10
Как то у нас тема про крипи истории заходила
https://slack-files.com/T2BCFAZHU-F2HQF3623-5aadb44df1