openlang

ruby delete ведёт себя неожиданно?

При изменении массива целых чисел получаю неожиданный результат в ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin13] :

values = [
  2, 134, 163, 215, 108
]
=> [2, 134, 163, 215, 108]
target = 108
=> 108
values.delete(target)
=> 108

небольшие изменения записи всё равно приводят к такому результату.

я неправильно это записываю, какая-то другая команда переопределяет это действие или, что ещё хуже, что-то повреждено? как это проверить, ведь я не уверен?

Переведено с английскогоПоказать оригинал

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    Согласно документации Array#delete (https://ruby-doc.org/core-3.0.0/Array.html#method-i-delete):

    Если блок не передан, из self удаляются все элементы ele, для которых ele == obj; возвращается последний удалённый элемент...

    Здесь target содержит 108, поэтому при присваивании переменной отображается это значение. Затем values.delete(target) находит совпадающий элемент в values, удаляет его и возвращает значение, содержащееся в target.

    Переведено с английскогоПоказать оригинал
  2. Ссылка на ответ

    Какой результат вы ожидали увидеть при выполнении этого кода? Приведённый пример, похоже, работает именно так, как должен.

    Посмотрите содержимое values сразу после выполнения вашего примера - последнего элемента там уже не должно быть.

    Определение delete() в Ruby может оказаться несколько неожиданным. Можно было бы ожидать, что метод возвращает изменённую копию, сохраняя исходный массив, и позволяет построить такую цепочку:

    values.delete(target).delete(163)

    а для изменения самого массива существует отдельная форма с восклицательным знаком:

    values.delete!(target)

    однако этот метод устроен иначе. Вызов обычного delete() непосредственно меняет массив-получатель.

    Переведено с английскогоПоказать оригинал

Другие стороны того же вопроса

  1. Как случайно выбирать варианты enum в GDScript на Godot 3.3, не перечисляя их?

    Вот объявление enum, которое я использую в GDScript: Хочу случайно выбирать вариант enum, не перечисляя все возможные вариант…

    Ответы 2Последняя активность gdscript
  2. Синтаксис остатка в Nim

    Как в Nim записать операцию взятия остатка? cell % 7 == 0 выдаёт undeclared identifier: '%' Ни поиск в Google, ни просмотр SO…

    Ответы 2Последняя активность nim
  3. Возврат результата из функции APL

    Как сделать так, чтобы моя функция возвращала значение после завершения выполнения? Например, у меня есть: ROUTINE N ? N ⍴ 12…

    Ответы 2Последняя активность apl