Могу ли я изменить ассоциативность оператора?
Здесь есть очень хорошая таблица операторов Ruby и их соответствующих ассоциаций. Согласно этой таблице, значительное число операторов остаются ассоциативными, и это не особенно полезно для меня. Есть ли способ, которым я могу изменить левый ассоциативный оператор, чтобы быть правым ассоциативным? Как мой код настроен x * x * x
не сработает, но x * (x * x)
буду работать. Это потому, что моя конкретная реализация x * x
он возвращает массив. По этой причине массив может быть параметром, передаваемым методу, но не может быть объектом, вызывающим метод. Я не могу отменить *
метод в классе массива, потому что есть в другом месте в моем проекте, где используется его функциональность по умолчанию, и, следовательно, исправление обезьяны не вариант. Есть ли способ изменить ассоциативность *
оператор для моего класса?
1 ответ
Нет.
Как и почти все языки, Ruby не позволяет изменять ассоциативность операторов. (Некоторыми исключениями являются Ioke, Seph, Haskell, Fortress и, возможно, Perl6.)
Для экземпляров класса Numeric
Существует протокол приведения типов, который можно использовать, чтобы создать видимость изменения ассоциативности арифметических операторов, но это действительно хрупкий взлом, а не то, для чего предназначен протокол.