Иво обнови решението на 18.10.2016 22:58 (преди около 8 години)
+# check value type before going deeper inside it
+def type_check(value, rest)
+ value.go_deeper(*rest) if (value.is_a? Hash) || (value.is_a? Array)
+end
+
+Hash.class_eval do
+ # gets the value with the current key and goes deeper inside it
+ def go_deeper(cur_key, *rest)
+ value = key?(cur_key) ? self[cur_key] : self[cur_key.to_sym]
+ rest.empty? ? value : value && type_check(value, rest)
+ end
+
+ def fetch_deep(keys)
+ go_deeper(*keys.split('.'))
+ end
+end
+
+Array.class_eval do
+ # same as for hash, but with mods for arrays
+ def go_deeper(index, *rest)
+ index = index.to_i
+ value = self[index] if size > index
+ rest.empty? ? value : value && type_check(value, rest)
+ end
+end
Това е само първата част от задачат, качвам я за коментар, не съм много сигурен дали методите трябва да ги сложа в class_eval, но взе че стана така и не съм ровил за друг начин
Не ти трябва class_eval. Виж примерите в последната лекция.