В этих случаях класс значений Scala будет «упакован», верно?

Если у меня есть этот класс значений:

class ActionId(val value: Int) extends AnyVal

Тогда во всех приведенных ниже примерах объект будет выделен для класса значений? (Он будет «в штучной упаковке» - он не будет просто развернут в простое 32-битное целое, верно?)

  1. Функция, которая возвращает класс значения - класс значений выходит из области видимости и, следовательно, будет «упакован»?

    def someFunction(): ActionId = {
      ...
      return ActionId(123)
    }
    
  2. Функция, которая возвращает объект с членом класса значения - значение класс выходит за рамки видимости и, следовательно, будет «упакован»?

    case class Post(id: ActionId, ...) { ... }
    
    def someFunction(): Post = {
      ...
      val somePost = Post(ActionId(123), ...) // ActionId will be "boxed", right?
      return somePost
    }
    
  3. Даже если объект с членом класса значения равен , а не возвращается (на самом деле не выходит из области видимости), класс значения будет по-прежнему «упакован», когда он используется в качестве члена другого класса (в качестве поля в классе Post, в этом примере)?

    def anotherFunction() {
      ...
      val somePost = Post(ActionId(123), ...) // "Boxed" here too, right?
    
      // ... do something with somePost
    
      // But don't:  return somePost
    
      // However some *other* similar functions *do* return `somePost` — so
      // class `Post` must be able to box the ActionId? Hence it's boxed (above)?
    }
    

С этим связан этот ответ , в котором говорится, что , когда класс значений не выходит за рамки , он эффективно встроен. Более подробная информация приведена в документе Процесс улучшения Scala SIP-15 Однако, насколько я могу судить, SIP-15 на самом деле не упоминает, что экземпляр класса значения, выходящий за пределы области действия, будет «упакован». Но я думаю, что кажется разумным, что это должно быть "в штучной упаковке". (Почему SIP явно не заявляет, что он будет упакован, если сбежит?)

8
задан Community 23 May 2017 в 01:52
поделиться