Как объявление вложенных массивов интерпретируется в Ruby?

Пока я работал над массивами, я пропустил запятую в объявлении вложенного массива в Ruby, но язык интерпретировал это по-другому. Если кто-нибудь знаком с таким поведением, пожалуйста, подумайте.

arr = [1,2[1,8]]
[1, 1] 
arr = [1,5[6,4]]
[1, 0] 
arr = [1,3[1,6]]
[1, 1] 
arr = [1,6[1,6]]
[1, 3] 
arr = [1,7[1,6]]
[1, 3] 
arr = [1,0[1,6]]
[1, 0] 
arr = [1,8[1,6]]
[1, 4]

Исключение должно быть создано на основании ложного объявления.

То, что вы случайно использовали, это docs.ruby-lang.org/en/3.0/Integer.html#method-i-5B-5D.

Sergio Tulentsev 27.02.2024 10:53
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
1
1
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Исключение должно быть сделано [...]

[1,8[1,6]] может выглядеть как синтаксическая ошибка в контексте литерала массива, но на самом деле это совершенно допустимое выражение Ruby. Он создает массив с двумя элементами: 1 и результатом 8[1,6], то есть 4.

8[1,6] извлекает часть целого числа 8. Для этого он рассматривает 8 как последовательность битов (двоичное число 00001000₂). Из этих битов извлекаются 6 бит, начиная с бита 1: (бит 0 является самым правым битом)

0b00001000[1,6]  #=> 8
   ↓↓↓↓↓↓
 0b000100        #=> 4

Подробности смотрите в документации по Integer#[].

Это очень похоже на "hello ruby"[1,6], который извлекает часть строки, рассматривая ее как последовательность символов: (где символ 0 является крайним левым символом)

"hello ruby"[1,6]
  ↓↓↓↓↓↓
 "ello r"

Другие вопросы по теме