Как известно, в руби, <=>, [], + и другие "операции" являются методами, которые можно переопределять.
Каким образом интерпретатор понимает, что в method можно передать параметры с помощью method(params), а в случае с методом [] "понимает", что параметры находятся между квадратных скобок и круглые использовать уже нельзя. Аналогично, каким образом идет разбор того, что method = 1 то же самое, что и method= 1?
Где лучше более углубленно почитать о таких деталях? Насколько много сахара такого плана в языке?
Если подробнее, то сначала происходит парсинг исходного текста в промежуточное представление кода. После чего перестают существовать отдельные символы '[' и ']', код становится древовидной структурой в памяти, которая уже хранит в узлах целые операторы. И соответственно вы переопределением оператора :[] реально просто перетасовываете указатели в этой структуре, которая ничего не знает о синтаксисе входного языка (в нашем случае ruby)
Это все разруливается в рантайме. То есть до момента непосредственно вызова функции ( оператора) не известно что именно будет вызвано. Разбор же исходников, смею предположить, организован как и у всех посредствам AST.
Стало интересно, каким именно образом реализована возможность понимать, например, что в методе [] нет круглых скобок и параметры передаются в квадратные. А в методе method= может быть, а может и не быть пробела. В голову приходят варианты что эти случаи чуть ли не "ифаются". Как мне кажется, такого выборочного поведения нет в других языках (вроде как, даже в питоне)