Куча говна / Говнокод #12235 Ссылка на оригинал

0

  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 Fai, (Updated )

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

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

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

      - Хочешь немутабельный массив? Ах ты пидорас, неверный!
      - Хочешь мутабельный список? Вали из скалы, еретик!
      Ответить
  • В 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 и др. - по типу всегда можно сказать, мутабульна или нет.
    Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8