ermek6
@ermek6
::Живу с удовольствием::

Почему не срабатывает замыкание?

Есть такой тест:
func fn(got []string) func(string) {
	return func(input string) {
		got = append(got, input)
	}
}

func TestWalk(t *testing.T) {
	cases := getCases()
	for _, test := range cases {
		t.Run(test.Name, func(t *testing.T) {
			var got []string
			walk(test.Input, fn(got))

			if !reflect.DeepEqual(got, test.ExpectedCalls) {
				t.Errorf("got %v, want %v", got, test.ExpectedCalls)
			}
		})
	}
}


Если в 10й строке пишу
walk(test.Input, func(input string) {
		            got = append(got, input)
	                })

то тесты проходят нормально.

Насколько я понимаю, срезы передаются по ссылке, возвращаемая анонимная функция в `fn` имеет доступ к `got`. Объясните пожалуйста :-)
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
tumbler
@tumbler
бекенд-разработчик на python
Потому что не по ссылке, а по значению. Т.е. длина, емкость и указатель на данные слайса - копируются, сами данные - нет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы