to_proc ALL THE THINGS! (първа част)
- Краен срок
- 06.12.2013 12:00
Срокът за предаване на решения е отминал
Може би вече сте се убедили, че Symbol#to_proc
е нещо полезно, което прави
кода по-компактен и по-четим. В това предизвикателство ще искаме от вас
да добавите две интресни имплементации на to_proc
и към други Ruby класове.
В примерите по-долу ще приемем, че имаме дефиниран следния код:
class Student
attr_accessor :name, :points, :rank
def initialize(name, points, rank)
@name = name
@points = points
@rank = rank
end
end
ivan = Student.new 'Иван', 10, :second
mariya = Student.new 'Мария', 12, :first
neycho = Student.new 'Нейчо', 9, :third
students = [ivan, mariya, neycho]
Array#to_proc
Дефинирайте метод Array#to_proc
, който да ни позволява да правим следното:
students.map(&[:name, :rank]) # => [['Иван', :second], ['Мария', :first], ['Нейчо', :third]]
По-просто казано, нашата имплементация на Array#to_proc
трябва да работи така:
[:points, :name].to_proc.call(ivan) # => [10, 'Иван']
Hash#to_proc
Дефинирайте метод Hash#to_proc
, който да ни улеснява да задаваме стойности на полета на обекти по следния начин:
students.each &{points: 0, rank: :last}
students.map(&:points) # => [0, 0, 0]
students.map(&:rank) # => [:last, :last, :last]
Или, отново, казано по-просто, Hash#to_proc
трябва да работи така:
{name: 'Петкан', points: -100}.to_proc.call(ivan)
ivan.name # => 'Петкан'
ivan.points # => -100
Решения
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Димитър Димитров
....
Finished in 0.00525 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Росен Рачев
....
Finished in 0.00517 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Георги Гърдев
....
Finished in 0.00536 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Стефан Василев
....
Finished in 0.00526 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Мария Терзиева
....
Finished in 0.00519 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Кристиан Ташков
....
Finished in 0.00519 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Илиян Бобев
....
Finished in 0.00539 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Валентин Ейткен
....
Finished in 0.00512 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Николай Хубанов
....
Finished in 0.00511 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Георги Ангелов
....
Finished in 0.00509 seconds
4 examples, 0 failures
-
Некоректно
- 2 успешни тест(а)
- 2 неуспешни тест(а)
Веселин Генадиев
FF..
Failures:
1) Array#to_proc works for a single element
Failure/Error: [:abs].to_proc.call(-42).should eq [42]
expected: [42]
got: [nil]
(compared using ==)
# /tmp/d20131206-25737-1emu88p/spec.rb:3:in `block (2 levels) in <top (required)>'
# ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
# ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'
2) Array#to_proc extracts values from objects
Failure/Error: [1, -2].map(&[:abs, :to_s]).should eq [[1, '1'], [2, '-2']]
expected: [[1, "1"], [2, "-2"]]
got: [[nil, nil], [nil, nil]]
(compared using ==)
# /tmp/d20131206-25737-1emu88p/spec.rb:7:in `block (2 levels) in <top (required)>'
# ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
# ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'
Finished in 0.00564 seconds
4 examples, 2 failures
Failed examples:
rspec /tmp/d20131206-25737-1emu88p/spec.rb:2 # Array#to_proc works for a single element
rspec /tmp/d20131206-25737-1emu88p/spec.rb:6 # Array#to_proc extracts values from objects
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Наталия Пацовска
....
Finished in 0.00513 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Сияна Славова
....
Finished in 0.00514 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Борислава Аладжова
....
Finished in 0.00529 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Никола Ненков
....
Finished in 0.00641 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Давид Петров
....
Finished in 0.00523 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Иван Проданов
....
Finished in 0.00547 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Александър Попов
....
Finished in 0.00504 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Иван Капукаранов
....
Finished in 0.0052 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Илия Ватахов
....
Finished in 0.00515 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Георги Кръстев
....
Finished in 0.00518 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Антонио Николов
....
Finished in 0.00517 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Цветан Иванов
....
Finished in 0.00535 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Емануела Моллова
....
Finished in 0.00517 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Диан Николов
....
Finished in 0.00509 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Димитър Бонев
....
Finished in 0.00506 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Калоян Калудов
....
Finished in 0.00514 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Кристиян Азманов
....
Finished in 0.00529 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Слав Керемидчиев
....
Finished in 0.00564 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Георги Шопов
....
Finished in 0.00512 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Ангел Венчев
....
Finished in 0.00535 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Красимира Божанова
....
Finished in 0.00507 seconds
4 examples, 0 failures
-
Коректно
- 4 успешни тест(а)
- 0 неуспешни тест(а)
Ангел Цанев
....
Finished in 0.00631 seconds
4 examples, 0 failures