@proRuby

Страница 580 из 1594
Liudmila
06.06.2017
05:53:23
Привет! Mail.ru ищет спикеров по курсу вебинаров по Ruby и RoR. Удаленно, в свободном графике. ЗП 15000 руб. Пишите кому интересно l.karamysheva@corp.mail.ru

Alexander
06.06.2017
06:54:29
ээээ.... я ещё не проснулся или там только 3 нулика?

а, спикеров...

тьфу

Google
Alexander
06.06.2017
07:15:03
Amir
06.06.2017
07:16:31
render json: Hash[TpPleaReg::DETAL_TYPES.map { |t| [t[0], t[2]] if t[1] == type_id } ].to_json что тут не так?

warning: wrong element type nil at 3 (expected array) warning: ignoring wrong elements is deprecated, remove them explicitly warning: this causes ArgumentError in the next release warning: wrong element type nil at 4 (expected array) warning: ignoring wrong elements is deprecated, remove them explicitly warning: this causes ArgumentError in the next release

Alexander
06.06.2017
07:18:44
я пытаюсь объяснить, что это должно быть выбором по умолчанию, потому что это позволяет писать более универсальный код. Я не считаю, что от того как ты напишешь свой тест, твои волосы станут мягкими и шелковистыми, просто рассказываю почем один подход предпочтительней другого
Забыл написать: Тестирую метод b в классе A (A#b), который внутри вызывает приватный метод A#c, и в тестах мне нужно убедиться, что он вызывает его один раз. Боюсь, с помощью прокси такого не сделаю

Вообще, английский знаешь?)

Amir
06.06.2017
07:22:55
Вообще, английский знаешь?)
Английский почти знаю но не понимаю почему ему аткая констуркция кода не нравиться у меня там тупо массив массивов с 3 элементами

и NIL я там никогда не сделаю

TYPES = [ [1, 1, 'qweqw'], [2, 1, 'qweqw'], [3, 2, 'qweqw'], [4, 2, 'qweqw'], ]

Google
Alexander
06.06.2017
07:23:49
и NIL я там никогда не сделаю
Ты дебагом проверил это? Полагаю, нет

Amir
06.06.2017
07:24:23
Ты дебагом проверил это? Полагаю, нет
кажеться map делает nil, мне надо фильтровать по второй колонке

|t| [t[0], t[2]] if t[1] == type_id

Alexander
06.06.2017
07:24:44
кажеться map делает nil, мне надо фильтровать по второй колонке
Значит, используй метод фильтрации, а не преобразования

Alexander
06.06.2017
07:25:13
о чем и вопрос
Поучи методы Array) пригодится

И Enumerable, который он в себя включает

Это базовые знания, которые ты должен знать перед стартом проектов полностью, а не узнавать потом у людей по частям. Все тонкости сразу не запомнишь, но основы нужно

Amir
06.06.2017
07:27:30
ты это скажи моему работодателю :)

тут вообще все тупые

Igor
06.06.2017
07:28:33
тут вообще все тупые
У тебя два пути - синяя или красная пилюля?

Tim
06.06.2017
07:28:46
ты понимаешь, что ты и себя таким образом оскорбляешь?

Amir
06.06.2017
07:29:53
ты понимаешь, что ты и себя таким образом оскорбляешь?
я про своих коллег :) и начальника наверно

Vasiliy
06.06.2017
07:30:10
чувак может пришёл на жиэс писать, а его на ваш руби кинули

Amir
06.06.2017
07:30:46
типа того

Alexander
06.06.2017
07:40:48
типа того
В таком случае сначала Гугл, потом чат

Ну и в твоих силах было отказаться, если не хочешь ?‍♂

Amir
06.06.2017
07:41:32
нет смотрите там у меня 3 колонок я должен фильтровать и оставить только 1 и 3 колонку чтобы передать к HaSH

Alexander
06.06.2017
07:42:03
Метод правильно выбран, условие неправильно поставлено

Google
Amir
06.06.2017
07:42:59
сделал так Hash[TpPleaReg::DETAL_TYPES.select { |t| t[1] == type_id }.map {|t| [t[0],t[2]]} ].to_json мне просто не очень нравиться такой вариант

неужели нельзя при map сразу фильтровать? вроде можно, но рельц ругает

Alexander
06.06.2017
07:46:15
map преобразует и только, он нужен когда кол-во элементов не меняется

чтобы не делать двойной обход — можно корячить each_with_object

либо двойной обход) вполне читаемый

вместо Hash.[] можешь использовать .to_h, полагаю

trickster
06.06.2017
07:51:36
после вторых рубей

Alexander
06.06.2017
07:52:01
после вторых рубей
надеюсь, < 2.0 нигде не осталось. это неудобно и небезопасно

Dima
06.06.2017
08:20:31
+

И медленнее

Alexander
06.06.2017
08:21:20
И медленнее
относительно неудобства и небезопасности — это мелочь ? но да

Alex
06.06.2017
08:37:48
вместо Hash.[] можешь использовать .to_h, полагаю
аналог - .reduce({}, :merge) (или наоборот аргументы, не помню)

Nikita
06.06.2017
09:37:27
:merge! только, или :update

Alex
06.06.2017
09:38:39
Nikita
06.06.2017
09:40:38
:merge будет создавать новый хэш на каждой итерации, а :update — нет, у тебя в качестве аккумулятора стоит пустой хэш в аргументах, он точно никем за пределами reduce еще не использовался, значит его можно безопасно мутировать

Alexander
06.06.2017
09:41:38
почему :merge! ?
ну типа один хэш вместо N хэшей, где N = размер массива

Amir
06.06.2017
11:19:11
нашел простое изящное решение TpPleaReg::DETAL_TYPES.map { |t| [t[0],t[2]] if t[1] == type_id }.compact.to_h

[1, nil, 3, nil, nil].compact => [1, 3]

Google
Sergey
06.06.2017
11:21:16
Лучше разделите map на select и map

Amir
06.06.2017
11:21:52
зачем

Alexey
06.06.2017
11:22:19
читабельнее

Amir
06.06.2017
11:22:25
Hash[TpPleaReg::DETAL_TYPES.select { |t| t[1] == type_id }.map {|t| [t[0],t[2]]} ].to_json вот так чтоли так не изящно

Alexey
06.06.2017
11:25:39
Hash[ TpPleaReg::DETAL_TYPES .select { |t| t[1] == type_id } .map { |t| [t[0], t[2]] } ].to_json

Sergey
06.06.2017
11:26:42
.select { |_, foo, _| foo == type_id } .map { |foo, _, bar| [foo, bar] } .to_h

Admin
ERROR: S client not available

Anton
06.06.2017
11:27:11
Lucifer а скажи пожалуйста, сколько у тебя данных в DETAL_TYPES?

и если можешь дай начальные условия

вообще, я бы сделал вот так hash = {} TpPleaReg::DETAL_TY.each { |a, b, c| hash[a] = c if b == type_id } hash

это был бы самый быстрый вариант

Sergey
06.06.2017
11:39:21
это был бы самый быстрый вариант
Либо я что-то не так делаю, либо не всегда

https://gist.github.com/droptheplot/705a271a775857a07df07ffa06d48b2f

ojab
06.06.2017
11:44:20
https://gist.github.com/droptheplot/705a271a775857a07df07ffa06d48b2f
плохой бенчмарк, во-первых данные в разных запусках разные, во-вторых все подмассивы одинаковые, в-третьих == type_id везде false

Anton
06.06.2017
11:44:35
https://gist.github.com/droptheplot/705a271a775857a07df07ffa06d48b2f
данные не так генерируешь

ojab
06.06.2017
11:44:36
ну и вообще, есть benchmark-ips. который лучше

Anton
06.06.2017
11:50:30
Либо я что-то не так делаю, либо не всегда
вот, правильный бенчмарк https://gist.github.com/droptheplot/705a271a775857a07df07ffa06d48b2f#gistcomment-2115904

Google
Anton
06.06.2017
11:51:00
идиоматичный руби - each_with_object
да, только его лучше вообще никогда не юзать

Anton
06.06.2017
11:53:15
В итоге все равно получилось быстрее
что быстрее получилось? :)

да, только его лучше вообще никогда не юзать
потому что он аллоцирует дофига всего и нафиг это надо, когда можно избежать легко

Alexander
06.06.2017
11:54:03
вообще, я бы сделал вот так hash = {} TpPleaReg::DETAL_TY.each { |a, b, c| hash[a] = c if b == type_id } hash
чем лучше each_with_object, предложенного мною выше? помимо лишних строк)

потому что он аллоцирует дофига всего и нафиг это надо, когда можно избежать легко
с чего ты взял, что он аллоцирует больше, чем твой вариант с объявлением переменной заранее?

Sergey
06.06.2017
11:54:53
что быстрее получилось? :)
А, он в другом порядке пишет

Alexander
06.06.2017
12:01:25
тем что это вкусовщина? :)
так вкусы или аллокация объектов?

Anton
06.06.2017
12:02:09
и то и то и зависит от того, сколько данных, где это будет и кто будет это поддерживать

Alexander
06.06.2017
12:02:58
и то и то и зависит от того, сколько данных, где это будет и кто будет это поддерживать
как отличается аллокация между твоим подходом и each_with_object?

Roman
06.06.2017
12:12:34
static VALUE enum_each_with_object(VALUE obj, VALUE memo) { RETURN_SIZED_ENUMERATOR(obj, 1, &memo, enum_size); rb_block_call(obj, id_each, 0, 0, each_with_object_i, memo); return memo; } где тут лишние аллокации?

No
06.06.2017
12:16:21
допустим даже аллокации лишние и есть. стоит ли заморачиваться из-за этого заранее? я бы юзал #each_with_object ровно до того момента, пока это не просаживало производительность. если бы стало просаживать - уже решал бы что с этим делать

Roman
06.06.2017
12:22:10
не думаю, что хоть когда-нибудь в моем коде узкое место будет в нативном руби методе

Anton
06.06.2017
12:22:11
есть GC.stat который показывает тебе количесво аллоцированных объектов, так?

если быть точным, вот такой ключ GC.stat(:total_allocated_objects)

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