Какой смысл части вводят, Идут?

В соответствии с кодом, которым вы поделились, currentSongIndex не инициализируется. У него будет какое-то значение мусора, поэтому ваше условие if (songIndex.getCurrentIndex () == 0) в первый раз будет ложным, а songIndex.getCurrentIndex () вернет мусор, следовательно recyclerView.getChildAt (songIndex.getCurrentIndex ()); будет нулевым

24
задан Flimzy 8 July 2017 в 19:31
поделиться

4 ответа

Срезы имеют много применений над массивами, некоторые из которых уже упоминались в других постерах.

  • Срезы могут работать во многих отношениях, как указатели.
    • Несколько срезов могут «указывать» на один и тот же базовый массив.
    • Срезы передаются по ссылке, но так как сам срез является указателем, его можно использовать для более эффективной передачи «массивов». поскольку весь массив копировать не нужно.
  • Однако, в отличие от указателей, срезы обеспечивают дополнительную безопасность буфера
    • Переполнения и переполнения среза вызывают исключения, а не позволяют вам небезопасную возможность доступа к другим областям памяти.
    • Срезы позволяют ограничивать доступ только к определенным областям массива. Это может быть чрезвычайно полезно при работе с подмножествами.
  • Длина среза определяется динамически во время выполнения, в отличие от массивов, размеры которых фиксированы во время компиляции. Кроме того, срезы можно динамически изменять размер во время выполнения.
19
ответ дан Russell Newquist 28 November 2019 в 23:55
поделиться

Я думаю, что срезы и массивы описаны намного лучше и более подробно в этой записи в блоге Go.

2
ответ дан Rohit 28 November 2019 в 23:55
поделиться

В дополнение к уже данным ответам, кусочки могут быть динамически определены, а массивы не могут быть. То есть вы можете использовать постоянные только для указания размера массива, в то время как вы можете использовать переменную, чтобы указать размер ломтика.

0
ответ дан 28 November 2019 в 23:55
поделиться

В go массивы передаются по значению; поэтому для "передачи по ссылке" используется срез. И это ещё не всё! Цитируя учебник Go go:

Размер массива - часть его набирать, однако, можно объявить ломтик переменная, которой можно присвоить указатель на любой массив с таким же тип элемента или, что более распространено, -а ломтиковое выражение формы a[low : высокий], представляющий собой субмассив проиндексированный низшим через высокий-1. Слайсы очень похожи на массивы, но не имеют явный размер ([] vs. [10]) и они ссылаться на сегмент, лежащий в основе, часто анонимный, обычный массив. Несколько срезов могут совместно использовать данные, если они представляют собой части одного и того же массива; несколько массивов никогда не могут совместно использовать данные.

Фрагменты гораздо чаще встречаются в Go. программы, чем обычные массивы; они - более гибкий, иметь ссылку семантики и эффективны. Что им не хватает точного контроля схема хранения данных обычного массива; если вы хотите иметь сотню элементов массив, хранящийся в вашей структуре, вы должны использовать обычный массив.

При передаче массива в функцию, ты почти всегда хочешь объявить формальный параметр - ломтик. Когда вы вызываете функцию, принимаете адрес массива и Go будет создать (эффективно) ссылку на срез и передай это.

13
ответ дан 28 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

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