На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём защитника отечества!



msm.ru
Модераторы: RaD
  
    > ruby переопределение операторов
      Есть ли возможность в руби как-то нормально реализовать оператор += ?
      Я конечно знаю, что можно просто переопределить оператор + а руби сам a += b преваратит в a = a + b
      Задница в том что во время простой операции сложения возвращается новый объект, а в случае += в новом объекте нет необходимсоти, достаточно модифицировать уже существующий. Как сделать += в руби не создавая новых объектов?
      Сообщение отредактировано: applegame -
      error: 'long long long' is too long for GCC
        С каких пор += не возвращает новый объект? Что мешает в + не возвращать новый объект, а модифицировать первый операнд?
        Я не могу тебя забыть, ты снишься мне ночами, твой нежный запах, вкус и цвет стоят перед глазами.
        Когда тебя со мною нет, так тоскливо, и без тебя я не могу, мое ПИВО...
          Вообще-то думаю будет совсем нехорошо, если при выполнении строки
          a = b + c
          кроме a будет изменяться и b.

          Так что не думаю, что изменение семантики операции + (или любой другой подобной) может кончиться чем то хорошим.
          Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
            Цитата deil @
            С каких пор += не возвращает новый объект?
            В руби не существует += самого по себе. Оно заменяется на + и =
            Цитата deil @
            Что мешает в + не возвращать новый объект, а модифицировать первый операнд?
            Мешает здравый смысл. За подобное поведение следует немедленное отрывание рук.

            Насколько я понял придется просто написать метод делающий то что нужно. Но так хотелось, чтобы еще и выглядело красиво. И почему они не сделали отдельный метод +=?
            Сообщение отредактировано: applegame -
            error: 'long long long' is too long for GCC
              В Алголе 68, Алголе W и Аде (хотя могу и ошибаться) в этом смысле хорошо. Там можно новые операторы определять.
              Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                Цитата applegame @
                Цитата deil @
                С каких пор += не возвращает новый объект?
                В руби не существует += самого по себе. Оно заменяется на + и =
                Цитата deil @
                Что мешает в + не возвращать новый объект, а модифицировать первый операнд?
                Мешает здравый смысл. За подобное поведение следует немедленное отрывание рук.

                Насколько я понял придется просто написать метод делающий то что нужно. Но так хотелось, чтобы еще и выглядело красиво. И почему они не сделали отдельный метод +=?

                Ну каков вопрос, таков и ответ собственно..
                Я не могу тебя забыть, ты снишься мне ночами, твой нежный запах, вкус и цвет стоят перед глазами.
                Когда тебя со мною нет, так тоскливо, и без тебя я не могу, мое ПИВО...
                  Цитата amk @
                  В Алголе 68, Алголе W и Аде (хотя могу и ошибаться) в этом смысле хорошо. Там можно новые операторы определять.

                  В Хаскелле, например, тоже, только читать код наводненный разнообразными операторами с разными приоритетами как-то не очень легко.
                  “Object-oriented design is the roman numerals of computing.” — Rob Pike
                  All software sucks
                    Цитата applegame @
                    Есть ли возможность в руби как-то нормально реализовать оператор += ?

                    Нормально он реализован.
                      Цитата Мохнатый @
                      Нормально он реализован.
                      В целом, да, работает. Возможно сказываются мои плюсовые замашки оптимизировать все что оптимизируется.
                      error: 'long long long' is too long for GCC
                        Я бы переформулировал вопрос так: код на С++ нужно постоянно оптимизировать? ;)
                        Я не могу тебя забыть, ты снишься мне ночами, твой нежный запах, вкус и цвет стоят перед глазами.
                        Когда тебя со мною нет, так тоскливо, и без тебя я не могу, мое ПИВО...
                          Цитата deil @
                          Я бы переформулировал вопрос так: код на С++ нужно постоянно оптимизировать? ;)
                          В C++ не нужно постоянно пессимизировать.
                          error: 'long long long' is too long for GCC
                            Это что значит?
                            Я не могу тебя забыть, ты снишься мне ночами, твой нежный запах, вкус и цвет стоят перед глазами.
                            Когда тебя со мною нет, так тоскливо, и без тебя я не могу, мое ПИВО...
                              Цитата deil @
                              Это что значит?
                              Есть такая штука - преждевременная пессимизация. В С++ это применение постфиксного ++ там где можно применить префиксный. Передача объемных данных по значению, а не по ссылке, применение неподходящих контейнеров и т.п. Поэтому когда я вижу что в операторе += происходят бессмысленные копирования я чувствую себя неуютно.

                              a += b (модифицируется кусок памяти переменной a)
                              a = a + b (резервируется новый кусок памяти, в него помещается результат a + b, старый кусок - собирается сборщиком мусора)

                              Как минимум две лишних операции: аллокация памяти и освобождение. В C++, в подобных случаях, я на автомате ненужные операции с памятью исключаю.
                              Сообщение отредактировано: applegame -
                              error: 'long long long' is too long for GCC
                              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script Execution time: 0,1139 ]   [ 14 queries used ]   [ Generated: 23.02.20, 23:18 GMT ]