@Drumsid

Реализация функции в имутабельном стиле?

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

Вот так тест жалуется, что у анонимной функции должен быть ретёрн.
$stylishData = array_map(function ($node) use ($indent, $depth): string {
        $type = $node['type'];
        $name = $node['name'];
        switch ($type) {
            case 'unchanged':
                $unchanged = stringify($node['value'], $depth + 1);
                return "{$indent}    {$name}: {$unchanged}";
            case 'removed':
                $removed = stringify($node['value'], $depth + 1);
                return "{$indent}  - {$name}: {$removed}";
            case 'added':
                $added = stringify($node['value'], $depth + 1);
                return "{$indent}  + {$name}: {$added}";
        }
    }, $tree);


Вот так тест жалуется, что $result не определен...
$stylishData = array_map(function ($node) use ($indent, $depth): string {
    $type = $node['type'];
    $name = $node['name'];
    switch ($type) {
        case 'unchanged':
            $unchanged = stringify($node['value'], $depth + 1);
            $result = "{$indent}    {$name}: {$unchanged}";
            break;
        case 'removed':
            $removed = stringify($node['value'], $depth + 1);
            $result = "{$indent}  - {$name}: {$removed}";
            break;
        case 'added':
            $added = stringify($node['value'], $depth + 1);
            $result = "{$indent}  + {$name}: {$added}";
            break;
    }
    return $result;
}, $tree);


а вот тут уже мутация.....
$stylishData = array_map(function ($node) use ($indent, $depth): string {
        $type = $node['type'];
        $name = $node['name'];
        $result = "";
        switch ($type) {
            case 'unchanged':
                $unchanged = stringify($node['value'], $depth + 1);
                $result = "{$indent}    {$name}: {$unchanged}";
                break;
            case 'removed':
                $removed = stringify($node['value'], $depth + 1);
                $result = "{$indent}  - {$name}: {$removed}";
                break;
            case 'added':
                $added = stringify($node['value'], $depth + 1);
                $result = "{$indent}  + {$name}: {$added}";
                break;
        }
        return $result;
    }, $tree);


совсем голова не варит уже, как это пофиксить? )) есть идеи?
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Добавьте к switch вариант default.

P.S.
а вот тут уже мутация
Чистые функции не должны мутировать какие-то внешние объекты. Но с локальными переменными внутри них можно делать что угодно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы