0 / 0 / 0
Регистрация: 21.09.2018
Сообщений: 4
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Руби не видит метод24.12.2019, 12:05. Показов 2538. Ответов 3
Всем привет.
В данный момент занимаюсь написанием собственной DSL, суть проблемы в том, что deep_merge метод (который я скопировал из гема configus) работает только через self.deep_merge(при этом не правильно), в остальных случаях метод не видимый в методе self.config. Мне нужно смержить два хэша, для этого стандартный merge не подойдёт, т.к он не работает на многоуровневых хэшах. init.rb: :staging - дочерний енв, : production - родительский енв Вывод должен быть таким: p config.key1 => "value1" p config.key2 => "new value2" (Т.е забрать все ключи и значения из prod, добавить их к staging, но не переписывать ключи staging, т.е исключить key2 и key4 к примеру)
Извиняюсь за кривую и костыльную реализацию дслки, получилось так как получилось
DSL - Domain Specific Language ( не Digital Subscriber Line )
0
|
24.12.2019, 12:05 | |
Ответы с готовыми решениями:
3
Не видит метод класса Делегат не видит метод Метод не видит коллекцию ObjectDataSource не видит метод |
the hardway first
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
|
||||||
24.12.2019, 15:23 | 2 | |||||
Сообщение было отмечено cybersuicide как решение
Решение
Не понял суть вопроса.
Но вы попались в ловушку с #method_missing :дело в том, что в методе Configus::deep_merge вы вызываете Hash#each_pair на экземпляре InHash , где, т. к. такого метода нет, создается новый элемент внутреннего хэша с ключом :each_pair и новым InHash в качестве значения, а т. к. сюда передается блок, то совсем веселье получается.Тоже самое в рекурсивном вызове - вы свой InHash проверяете на соответствие классу Hash .Ваш метод Configus::config возвращает in_hash , а должен вернуть merged_hash . Да вы меняете значения хеша production значениями staging , но ожидаете получить не Код
#<Configus::InHash:0x0000000003e49ca8 @inner_hash= {:production=> #<Configus::InHash:0x0000000003e49be0 @inner_hash= {:key1=>["value1"], :key2=>["new value2"], :group1=> #<Configus::InHash:0x0000000003e49a28 @inner_hash={:key3=>["value3"], :key4=>["new value4"]}>}>, :staging=> #<Configus::InHash:0x0000000003e49870 @inner_hash= {:key2=>["new value2"], :group1=> #<Configus::InHash:0x0000000003e49730 @inner_hash={:key4=>["new value4"]}>}>}> Код
#<Configus::InHash:0x00000000041a2008 @inner_hash= {:key1=>["value1"], :key2=>["new value2"], :group1=> #<Configus::InHash:0x00000000041a1e50 @inner_hash={:key3=>["value3"], :key4=>["new value4"]}>}>
1
|
0 / 0 / 0
Регистрация: 21.09.2018
Сообщений: 4
|
|
24.12.2019, 15:47 [ТС] | 3 |
Благодарю вас от всей своей души, решили мою двухнедельную проблему, целую ваши пятки!
0
|
the hardway first
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
|
|||||||||||
25.12.2019, 08:57 | 4 | ||||||||||
ИМХО, странная идея. В вашей реализации т. н. "родительский" конфиг перезаписывается. Я ни в коем разе вас не осуждаю, но мне было бы удобнее использовать такую штуку
0
|
25.12.2019, 08:57 | |
25.12.2019, 08:57 | |
Помогаю со студенческими работами здесь
4
Скрипт не видит метод Метод не видит массив Компилятор не видит расширяющий метод Не видит метод 'connect' QtRuby Eclipse не видит метод активити В mvpAppCompatFragment не видит метод onCreateView Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |