#[derive(Debug)]

pub enum Salt<'a> {

A(&'a [u8]),

B(usize)

}



impl <'a> Salt<'a> {

fn as_slice(&self) -> &[u8] {

match(self) {

Self::A(d) => d,

Self::B(size) => {

//case1 컴파일 오류남. out of scope value가 borrow 하려하기 때문

                    vec![0x30u8; *size].as_slice()


//case2 오류 발생 안함. 소유권은 호출자가?

//&[ 0x30u8; 5]

}

}

}

}


fn salt_process(salt:Salt) {

    dbg!( salt.as_slice() );

}


fn main() {

let hold_array = &[0,1,2,3];

salt_process( Salt::A(hold_array) );


salt_process( Salt::B(5) );

}



위 같은 상황에서 case1 은 오류가 나는걸 알겠음. 해제되는 vec을 참조하려고 했으니..


그렇다면 case2 의 경우는 왜 오류가 나지 않을까? case2 는 생성한 value 의 참조를 리턴하는것이 아니라

상수의 참조를 리턴하는거였음.. &[ *size as u8; 5] 와 같이 동적으로 바꾸면 컴파일 오류가 발생함



러스트에선 가끔 이게 불편함...


소유권을 누군가 가지고 있어야 하기 때문에 


소유코드를 넣어줘야하는 경우가 가끔 생기는데


이게 좀 어거지같은 기분이라