| Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум на Исходниках.RU > Ruby > ruby переопределение операторов |
| Автор: applegame 26.12.12, 12:40 |
| Есть ли возможность в руби как-то нормально реализовать оператор += ? Я конечно знаю, что можно просто переопределить оператор + а руби сам a += b преваратит в a = a + b Задница в том что во время простой операции сложения возвращается новый объект, а в случае += в новом объекте нет необходимсоти, достаточно модифицировать уже существующий. Как сделать += в руби не создавая новых объектов? |
| Автор: deil 28.12.12, 08:26 |
| С каких пор += не возвращает новый объект? Что мешает в + не возвращать новый объект, а модифицировать первый операнд? |
| Автор: amk 28.12.12, 16:51 |
| Вообще-то думаю будет совсем нехорошо, если при выполнении строки a = b + c кроме a будет изменяться и b. Так что не думаю, что изменение семантики операции + (или любой другой подобной) может кончиться чем то хорошим. |
| Автор: applegame 29.12.12, 22:15 |
| В руби не существует += самого по себе. Оно заменяется на + и = Мешает здравый смысл. За подобное поведение следует немедленное отрывание рук. Насколько я понял придется просто написать метод делающий то что нужно. Но так хотелось, чтобы еще и выглядело красиво. И почему они не сделали отдельный метод +=? |
| Автор: amk 29.12.12, 23:04 |
| В Алголе 68, Алголе W и Аде (хотя могу и ошибаться) в этом смысле хорошо. Там можно новые операторы определять. |
| Автор: deil 07.01.13, 23:09 |
| Цитата applegame @ В руби не существует += самого по себе. Оно заменяется на + и = Мешает здравый смысл. За подобное поведение следует немедленное отрывание рук. Насколько я понял придется просто написать метод делающий то что нужно. Но так хотелось, чтобы еще и выглядело красиво. И почему они не сделали отдельный метод +=? Ну каков вопрос, таков и ответ собственно.. |
| Автор: korvin 13.01.13, 09:44 |
| Цитата amk @ В Алголе 68, Алголе W и Аде (хотя могу и ошибаться) в этом смысле хорошо. Там можно новые операторы определять. В Хаскелле, например, тоже, только читать код наводненный разнообразными операторами с разными приоритетами как-то не очень легко. |
| Автор: Мохнатый 16.01.13, 06:23 |
| Нормально он реализован. |
| Автор: applegame 23.01.13, 12:40 |
| В целом, да, работает. Возможно сказываются мои плюсовые замашки оптимизировать все что оптимизируется. |
| Автор: deil 25.01.13, 12:16 |
Я бы переформулировал вопрос так: код на С++ нужно постоянно оптимизировать? |
| Автор: applegame 25.01.13, 19:20 |
| В C++ не нужно постоянно пессимизировать. |
| Автор: deil 29.01.13, 11:45 |
| Это что значит? |
| Автор: applegame 01.02.13, 07:24 |
| Есть такая штука - преждевременная пессимизация. В С++ это применение постфиксного ++ там где можно применить префиксный. Передача объемных данных по значению, а не по ссылке, применение неподходящих контейнеров и т.п. Поэтому когда я вижу что в операторе += происходят бессмысленные копирования я чувствую себя неуютно. a += b (модифицируется кусок памяти переменной a) a = a + b (резервируется новый кусок памяти, в него помещается результат a + b, старый кусок - собирается сборщиком мусора) Как минимум две лишних операции: аллокация памяти и освобождение. В C++, в подобных случаях, я на автомате ненужные операции с памятью исключаю. |