Вопрос №3021 от пользователя Владимир Волков в уроке «Функции первого класса. Передача функций как аргументов», курс «PHP: Построение абстракций»
Почему не срабатывает такой код, на бумаге вроде срабатывает)
`function product($num1, $num2, $func)
{
// BEGIN (write your solution here)
if ($num1 > $num2) { return 0; }
return $func($num1, product($num1+1, $num2, $func));
// END
}`
There was 1 failure:
1) App\TestSolution::testProduct
Failed asserting that 4 matches expected -6.
/usr/src/app/TestSolutions.php:30
FAILURES!
Tests: 2, Assertions: 6, Failures: 1.
make: *** [test] Error 1
make: Leaving directory `/usr/src/app'
/usr/src/app/TestSolutions.php:30
а вы смотрели на эту строчку? На каких данных у вас возвращает 4 вместо -6 ?
function product($num1, $num2, $func($num1, $num2) {return $num1 - $num2;})
{
// BEGIN (write your solution here)
if ($num1 > $num2) { return 0; }
return $func($num1, product($num1+1, $num2, $func));
// END
}
Данные эти: product(3, 5, $func($a, $b) {return $a - $b;})
получается так:
3 - product(3+1, 5, $func)
3 - 4 - product(4+1, 5, $func)
3 - 4 - 5 - product(5+1, 5, $func)
3 - 4 - 5 - 0 = -6
может кто-то помочь расписать как выполняется код выше, где ошибка?
согласно тестов получается 4, у меня -6
Оказывается у нас на сайте была выложена старая версия упражнения с ошибкой(. Обновил версию. Попробуйте сбросить прогресс и все должно получиться. Извините что сбили вас с толку.
хм, я тоже хотел решить с прибавлением последовательности, но у меня и тесты показывают 4 и на локалке)
Перед return в func стоит добавить echo $a. " - ".$b."<br>"; для дебага, и тогда видно что работает вовсе не так:
Данные эти: product(3, 5, $func($a, $b) {return $a - $b;}) получается так:
3 - product(3+1, 5, $func) 3 - 4 - product(4+1, 5, $func) 3 - 4 - 5 - product(5+1, 5, $func) 3 - 4 - 5 - 0 = -6
Кирилл, объясните?
Вроде разобрался, дело в том что если делать return $func($num1, product($num1+1, $num2, $func)); то получится 3 - 4 - 5 - 0 , только операции вычения происходят начиная с самой глубокой, тоесть с права на лево, 5-0= 5, 4-5=-1, 3 -(-1)=4..а в случае с вычетанием от num2 получаем - 3-(5-1)=-1, -1-5=-6 (5 получили потому что 3==3 подставляем 5)
Круто! -)
Используйте Хекслет по максимуму!
- Задавайте вопросы по уроку
- Проверяйте знания в квизах
- Проходите практику прямо в браузере
- Отслеживайте свой прогресс
Зарегистрируйтесь или войдите в свой аккаунт
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.







