1. Куча / Говнокод #12235

    +127

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    val arr = new Array[Int](3)
    val arr2 = arr
    
    arr(0) = 100
    arr(1) = 200
    arr(2) = 300
    
    //arr2 == Array(100, 200, 300)

    Не говнокод конечно, хотя как посмотреть.

    Это нормально, учитывая, что val предполагает неизменяемость значения, или в данном случае считается, что только присвоить новое значение нельзя, а изменять внутреннюю структуру массива можно как захочешь?

    Ведь наже в C++ нельзя изменить значения const std::vector.

    Запостил: Fai, 01 Декабря 2012

    Комментарии (12) RSS

    • > Ведь наже в C++ нельзя изменить значения const std::vector.

      [image]yaoming.png[/image]

      http://ideone.com/kHHEzT
      Ответить
      • читер!
        Ответить
      • Я постю код на ideone.com джва раза в день, так как там есть банеры с рекламой женского нижнего белья.
        Ответить
      • Ты кастанул и изменил значение std::vector, а не const std::vector, так не считается.
        Ответить
    • val это походу как const перед сишным указателем:
      char * const p1;
      p1[0] = 'a'; // можно
      p1 = q; // нельзя
      Ответить
      • Еще оказывается, что Array - мутабельный, а List - немутабельный!

        - Хочешь мутабельный массив? Держи Array!
        - Хочешь немутабельный список? Держи List!

        - Хочешь немутабельный массив? Ах ты пидорас, неверный!
        - Хочешь мутабельный список? Вали из скалы, еретик!
        Ответить
        • >Хочешь немутабельный массив?
          Vector

          >Хочешь мутабельный список?
          scala.collection.mutable.DoubleLinkedLis t
          scala.collection.mutable.LinkedList
          scala.collection.mutable.ListBuffer
          scala.collection.mutable.MutableList

          http://stackoverflow.com/questions/11049213/which-scala-mutable-list-to-use
          Ответить
        • val - это почти тотже final для параметров функции в жабе
          Ответить
    • В Perl, например имеет значение контекст:
      my @a = ();
      # list context
      my @b = @a;
      $a[0] = 100; $a[1] = 200; $a[2] = 300;

      http://ideone.com/6zoXp7

      Или же:
      my $a = [];
      # scalar context
      my $b = $a;
      $a->[0] = 100; $a->[1] = 200; $a->[2] = 300;

      http://ideone.com/EPZsig

      Тут дело в value-type vs. reference-type.
      Ответить
    • >или в данном случае считается, что только присвоить новое значение нельзя, а изменять внутреннюю структуру массива можно как захочешь?

      Да. Переменная иммутабельна, а значение мутабельно. Мутабельность структуры данных определяется ее типом. Стандартные коллекции разделены на scala.collection.mutable, scala.collection.immutable и др. - по типу всегда можно сказать, мутабульна или нет.
      Ответить

    Добавить комментарий